遍历字符串R的字符

67up9zun  于 2023-01-28  发布在  其他
关注(0)|答案(5)|浏览(132)

有人能解释一下为什么这没有把所有的数字都打印出来吗?

numberstring <- "0123456789"

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

字符串不就是字符数组吗?在R中怎么做呢?

qij5mzcb

qij5mzcb1#

在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"
bn31dyow

bn31dyow2#

只是为了好玩,这里有一些其他的方法来拆分字符串的每个字符。

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"
wgmfuz8q

wgmfuz8q3#

可使用tidyverse::str_split

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

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

v64noz0r4#

这里有一个简单的方法,使用for循环和substring迭代字符串,这并不比常见情况下的现有答案好多少,但是如果你想尽早退出循环,而不是像str_split/scan/substring(x, 1:nchar(x), 1:nchar(x))/regmatches那样总是先遍历整个字符串,那么它可能会很有用。

s <- "0123456789"

if (s != "") {
  for (i in 1:nchar(s)) {
    print(substring(s, i, i))
  }
}

需要if来避免从1到0(包括两端)的反向循环。

zzzyeukh

zzzyeukh5#

您的问题并不是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
>

相关问题