有人能解释一下为什么这没有把所有的数字都打印出来吗?
numberstring <- "0123456789" for (number in numberstring) { print(number) }
字符串不就是字符数组吗?在R中怎么做呢?
qij5mzcb1#
在R中,"0123456789"是长度为1的字符向量。如果要迭代字符,必须使用strsplit将字符串拆分为单个字符的向量。
"0123456789"
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"
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"
wgmfuz8q3#
可使用tidyverse::str_split
numberstring <- "0123456789" str_split(numberstring,boundary("character")) 1. '0''1''2''3''4''5''6''7''8''9'
v64noz0r4#
这里有一个简单的方法,使用for循环和substring迭代字符串,这并不比常见情况下的现有答案好多少,但是如果你想尽早退出循环,而不是像str_split/scan/substring(x, 1:nchar(x), 1:nchar(x))/regmatches那样总是先遍历整个字符串,那么它可能会很有用。
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(包括两端)的反向循环。
if
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 >
5条答案
按热度按时间qij5mzcb1#
在R中,
"0123456789"
是长度为1的字符向量。如果要迭代字符,必须使用
strsplit
将字符串拆分为单个字符的向量。bn31dyow2#
只是为了好玩,这里有一些其他的方法来拆分字符串的每个字符。
wgmfuz8q3#
可使用tidyverse::str_split
v64noz0r4#
这里有一个简单的方法,使用
for
循环和substring
迭代字符串,这并不比常见情况下的现有答案好多少,但是如果你想尽早退出循环,而不是像str_split
/scan
/substring(x, 1:nchar(x), 1:nchar(x))
/regmatches
那样总是先遍历整个字符串,那么它可能会很有用。需要
if
来避免从1到0(包括两端)的反向循环。zzzyeukh5#
您的问题并不是100%清楚所需的结果(分别打印字符串中的每个字符,或者以给定的打印循环将导致每个数字在其自己的行上生成的方式存储每个数字)。要存储numberstring以便使用您包括的循环打印: