循环在字符串中的单词

时间:2016-12-23 12:48:08

标签: r

我有一个像这样的字符串

line <- "I got a string"

我现在要做的是循环遍历此字符串中的单词。所以我这样做:

list = strsplit(line, " ")

现在我想像这样循环:

for(i in list){
 print(i)
}

但现在它只是打印整个句子,而我正在寻找

I

got

a 

string

关于如何让这个工作的任何想法?

1 个答案:

答案 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]]选项将循环遍历第一个字符串。