在 R 中循环"if-clause"字符串比较导致"the condition has length > 1 and only the first element will be used" ?



我对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")

相关内容

  • 没有找到相关文章

最新更新