我对r中的这种行为感到困惑,我只是想对strsplit生成的字符串列表进行简单的字符串比较。所以我不明白为什么下面的前两段代码达到了我的预期,而第三段却没有。
> for (i in strsplit("A text I want to display with spaces", " ")) { print(i) }
[1] "A" "text" "I" "want" "to" "display" "with" "spaces"
好的,这是有道理的…
> for (i in strsplit("A text I want to display with spaces", " ")) { print(i=="want") }
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
好的,这个也是。但是,下面的结构有什么问题呢?
> for (i in strsplit("A text I want to display with spaces", " ")) { if (i=="want") print("yes") }
Warning message:
In if (i == "want") print("yes") :
the condition has length > 1 and only the first element will be used
当遇到第四个单词时,为什么不直接打印"yes"?我应该做些什么来达到我想要的效果?
问题是strsplit
产生一个分割字符串的列表(在本例中长度为1,因为您只给了它一个字符串来分割)。
ss <- strsplit("A text I want to display with spaces", " ")
for (i in ss[[1]]) {
if (i=="want") print("yes")
}
你可以看到发生了什么如果你只是打印元素:
for (i in ss) {
print(i)
}
第一个元素是character
向量
取决于你在做什么,你也可以考虑矢量化比较,如ifelse(ss=="want","yes","no")