R ifelse - 向量顺序的意外变化

时间:2017-06-22 12:44:54

标签: r

运行后我得到了意想不到的结果:

 test = c(rep(FALSE, 2), rep(TRUE, 6))
 ifelse(test, c(1:8)[test], 1)
[1] 1 1 5 6 7 8 3 4 

我原本期望1 1 3 4 5 6 7 8,但yesifelse(test, yes, no)的索引会被转换。也许我需要更多咖啡,但如果有人能解释这个结果背后的逻辑,我将不胜感激。

1 个答案:

答案 0 :(得分:6)

ifelse中矢量的长度应该相同。在OP的代码中,第二个参数再次被子集化,而第三个参数1被回收(虽然很好)

ifelse(test, 1:8, 1)
#[1] 1 1 3 4 5 6 7 8

?ifelse

的文档中对此进行了解释
  

如果是或否太短,他们的元素将被回收。是的   评估是否且仅当测试的任何元素是真的,并且类似地   没有。

这里,'yes','no'表示ifelse

中的一般用法参数
  

ifelse(test,yes,no)