遍历字符串R的字符

20

请问为什么这段R代码不能将所有数字分别打印出来?

numberstring <- "0123456789"

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

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

5个回答

34

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

12
R又一次使某些东西变得不必要地复杂。 - Quantum7

7

仅供娱乐,以下是一些分割字符串的其他方法,每个字符都会被拆分。

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"

2
使用tidyverse::str_split可以实现。
numberstring <- "0123456789"
str_split(numberstring,boundary("character"))

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

1

以下是使用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的反向循环,包括两端。


-4

您的问题并不十分清楚,想要实现什么样的结果(是将字符串中的每个字符逐一打印出来,还是以某种方式存储每个数字,使得给定的循环能够将每个数字分别打印在自己的行上)。 要以能够使用您所包含的循环打印出字符串中的数字,请按如下方式存储数字串:

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
> 

8
我认为你没有理解问题。请查看其他答案。 - David Arenburg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接