স্ট্রিংয়ের প্রথম চরিত্রটি পাওয়া এবং অপসারণ করা


102

আমি প্রতিটি চরিত্রের জন্য বিভিন্ন মান নির্ধারণ করে অক্ষরের স্ট্রিংগুলি ব্যবহার করে কিছু 2-মাত্রিক হাঁটাচলা করতে চাই। আমি স্ট্রিংয়ের প্রথম চরিত্রটি 'পপ' করার, এটি ব্যবহার করার এবং বাকী স্ট্রিংয়ের পুনরাবৃত্তি করার পরিকল্পনা করছিলাম।

আমি কীভাবে এরকম কিছু অর্জন করতে পারি?

x <- 'hello stackoverflow'

আমি এই জাতীয় কিছু করতে সক্ষম হতে চাই:

a <- x.pop[1]

print(a)

'h'
print(x)

'ello stackoverflow'

উত্তর:


167

দেখুন ?substring

x <- 'hello stackoverflow'
substring(x, 1, 1)
## [1] "h"
substring(x, 2)
## [1] "ello stackoverflow"

popউভয়ই একটি মূল্য ফেরত দেয় এবং এতে সঞ্চিত ডেটা আপডেট করার একটি পার্শ্ব প্রতিক্রিয়া রয়েছে এমন একটি পদ্ধতি থাকার xধারণাটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের ধারণা very সুতরাং popচরিত্রের ভেক্টরগুলিতে পরিচালনা করার জন্য কোনও ফাংশন সংজ্ঞায়িত করার পরিবর্তে আমরা একটি পদ্ধতি দিয়ে একটি রেফারেন্স ক্লাস করতে পারি pop

PopStringFactory <- setRefClass(
  "PopString",
  fields = list(
    x = "character"  
  ),
  methods = list(
    initialize = function(x)
    {
      x <<- x
    },
    pop = function(n = 1)
    {
      if(nchar(x) == 0)
      {
        warning("Nothing to pop.")
        return("")
      }
      first <- substring(x, 1, n)
      x <<- substring(x, n + 1)
      first
    }
  )
)

x <- PopStringFactory$new("hello stackoverflow")
x
## Reference class object of class "PopString"
## Field "x":
## [1] "hello stackoverflow"
replicate(nchar(x$x), x$pop())
## [1] "h" "e" "l" "l" "o" " " "s" "t" "a" "c" "k" "o" "v" "e" "r" "f" "l" "o" "w"

15

এছাড়াও রয়েছে str_substringr প্যাকেজ থেকে

x <- 'hello stackoverflow'
str_sub(x, 2) # or
str_sub(x, 2, str_length(x))
[1] "ello stackoverflow"


8

substringঅবশ্যই সেরা, তবে এখানে একটি strsplitবিকল্প, যেহেতু আমি এখনও দেখিনি।

> x <- 'hello stackoverflow'
> strsplit(x, '')[[1]][1]
## [1] "h"

বা সমতুল্য

> unlist(strsplit(x, ''))[1]
## [1] "h"

এবং আপনি pasteবাকী স্ট্রিং একসাথে ফিরে করতে পারেন ।

> paste0(strsplit(x, '')[[1]][-1], collapse = '')
## [1] "ello stackoverflow"

5

প্রথম অক্ষর অপসারণ:

x <- 'hello stackoverflow'
substring(x, 2, nchar(x))

আইডিয়াটি x থেকে শুরু করে অক্ষরের সংখ্যা থেকে শুরু করে সমস্ত অক্ষর নির্বাচন করে। শব্দ বা বাক্যাংশে আপনার অসম সংখ্যা রয়েছে যখন এটি গুরুত্বপূর্ণ।

প্রথম বর্ণটি নির্বাচন করা পূর্ববর্তী উত্তর হিসাবে তুচ্ছ:

substring(x,1,1)

2

অন্য বিকল্প হ'ল নিয়মিত এক্সপ্রেশন ফাংশন regmatchesএবং সহ সাব-এক্সপ্রেশন ক্যাপচারিং ব্যবহার করা regexec

# the original example
x <- 'hello stackoverflow'

# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', x))

এটি পুরো স্ট্রিং, প্রথম অক্ষর এবং "পপড" এর ফলাফল 1 দৈর্ঘ্যের তালিকায় দেয়।

myStrings
[[1]]
[1] "hello stackoverflow" "h"                   "ello stackoverflow" 

যা সমান list(c(x, substr(x, 1, 1), substr(x, 2, nchar(x))))। এটি হ'ল এটিতে পছন্দসই উপাদানগুলির দুর্দান্ত সেট পাশাপাশি পুরো স্ট্রিং রয়েছে।


যোগ করা sapplyএই পদ্ধতিতে> 1 দৈর্ঘ্যের একটি চরিত্রের ভেক্টরের জন্য কাজ করতে দেয়।

# a slightly more interesting example
xx <- c('hello stackoverflow', 'right back', 'at yah')

# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', xx))

এটি প্রথম উপাদান হিসাবে মেলে পূর্ণ স্ট্রিং এবং ()নীচের উপাদানগুলির হিসাবে ক্যাপচার ম্যাচিং সুবে এক্সপ্রেসশনগুলির সাথে একটি তালিকা ফেরত দেয় । রেগুলার এক্সপ্রেশন তাই '(^.)(.*)', (^.)প্রথম অক্ষর মিলে যায় এবং (.*)অবশিষ্ট অক্ষরের সাথে মেলে।

myStrings
[[1]]
[1] "hello stackoverflow" "h"                   "ello stackoverflow" 

[[2]]
[1] "right back" "r"          "ight back" 

[[3]]
[1] "at yah" "a"      "t yah" 

এখন, আমরা পছন্দসই সাবস্ট্রিংগুলি টানতে বিশ্বস্ত sapply+ [পদ্ধতিটি ব্যবহার করতে পারি ।

myFirstStrings <- sapply(myStrings, "[", 2)
myFirstStrings
[1] "h" "r" "a"
mySecondStrings <- sapply(myStrings, "[", 3)
mySecondStrings
[1] "ello stackoverflow" "ight back"          "t yah"

এটি একটি খুব সুন্দর কৌশল কিন্তু আমি মনে করি এটি প্রশ্নটিকে মিস করে।
পেড্রোসওরিও

আপনাকে আরও ব্যাখ্যা করতে হবে কারণ এটি অন্যান্য উত্তরগুলির মতো একই আউটপুট উত্পাদন করতে পারে। sapplyনিষ্ক্রিয়করণের জন্য কোডের চূড়ান্ত ব্লকটি দেখুন । প্রথম চরিত্রটি "পপিং", যেমন প্রশ্নের মধ্যে উল্লেখ করা হয়েছে, ফলাফলটি ভেক্টর (মাইসেকেন্ডসট্রিংস) এ এই প্রক্রিয়াটি পুনরাবৃত্তি করার বিষয়টি।
lmo

আপনি কেবলমাত্র যুক্ত করেছেন এমন অতিরিক্ত ব্যাখ্যার সাথে এটি কাজ করে তা নিশ্চিত করুন তবে এটি এখনও তার চেয়ে বেশি সংশ্লেষিত দেখতে পাচ্ছি।
পেড্রোসওরিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.