web-dev-qa-db-ja.com

文字列Rの文字を反復処理する

なぜこれがRですべての数字を別々に印刷しないのか誰かが私に説明できますか?.

numberstring <- "0123456789"

for (number in numberstring) {
  print(number)
}

文字列は文字の配列だけではないですか? Rでそれを行う方法は何ですか?

12
Lukasz

R "0123456789"は長さ1の文字ベクトルです。

文字を反復処理する場合は、strsplitを使用して文字列を単一の文字のベクトルに分割する必要があります。

numberstring <- "0123456789"

numberstring_split <- strsplit(numberstring, "")[[1]]

for (number in numberstring_split) {
  print(number)
}
# [1] "0"
# [1] "1"
# [1] "2"
# [1] "3"
# [1] "4"
# [1] "5"
# [1] "6"
# [1] "7"
# [1] "8"
# [1] "9"
22
Sven Hohenstein

面白くするために、ここでは各文字列を分割する他の方法をいくつか紹介します。

x <- "0123456789"
substring(x, 1:nchar(x), 1:nchar(x))
# [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
regmatches(x, gregexpr(".", x))[[1]]
# [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" 
scan(text = gsub("(.)", "\\1 ", x), what = character())
# [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
5
Rich Scriven

あなたの質問は、望ましい結果について100%明確ではありません(文字列から各文字を個別に印刷するか、特定の印刷ループで各数値が独自の行に生成されるように各数値を格納します)。含めたループを使用して印刷されるようにnumberstringを格納するには:

numberstring<-c(0,1,2,3,4,5,6,7,8,9)
for(number in numberstring){print(number);}

[1] 0
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
> 
0
Greg Syme

Tidyverse :: str_splitで可能

numberstring <- "0123456789"
str_split(numberstring,boundary("character"))

1. '0''1''2''3''4''5''6''7''8''9'
0
mini_lils