我有一个像这样的字符串
line <- "I got a string"
我现在要做的是循环遍历此字符串中的单词。所以我这样做:
list = strsplit(line, " ")
现在我想像这样循环:
for(i in list){
print(i)
}
但现在它只是打印整个句子,而我正在寻找
I
got
a
string
关于如何让这个工作的任何想法?
答案 0 :(得分:2)
strsplit
可以采用输入矢量:
> strsplit(c("I have a string","I have one too"), " ")
[[1]]
[1] "I" "have" "a" "string"
[[2]]
[1] "I" "have" "one" "too"
为了使输出保持分离,strsplit
将每个输出放入一个列表,并保持输出一致,即使给出一个长度为1的向量,它仍然会输出一个列表。
> strsplit("I have a string", " ")
[[1]]
[1] "I" "have" "a" "string"
因此,您的for
循环仅索引到数据的第一级,即长度为1的列表元素。这意味着i
的值设置为:
[1] "I" "have" "a" "string"
如果要索引实际的字符串向量,则需要使用注释中的建议之一,或者使用unlist
将列表元素简化为向量,如@etienne建议的那样。
for(i in unlist(list)){ print(i) }
当您将for
循环的索引指定为@Roland建议时,或者索引到列表的第一个元素:
for(i in list[[1]]){ print(i) }
出于您的目的,这两个选项将产生相同的结果,但如果您给strsplit
一个长度超过长度为1的向量,则会有所不同。在这种情况下,unlist
选项将连接所有将列表组合成一个向量循环,其中list[[1]]
选项将循环遍历第一个字符串。