R ifelse - 向量顺序意外改变

3

运行后我得到了一个意外的结果:

 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,但是ifelse(test, yes, no)yes的索引被调换了。也许我需要多喝咖啡,但如果有人能解释这个结果背后的逻辑,我会很感激。
1个回答

6
< p >在 ifelse 中向量的长度应该相同。在原作者的代码中,第二个参数再次被子集化,而第三个参数 1 会被循环使用(没问题)< /p >
ifelse(test, 1:8, 1)
#[1] 1 1 3 4 5 6 7 8

这在?ifelse的文档中有解释。

如果yes或no太短,则它们的元素将被循环使用。 只有当test的任何元素为true时,才会评估yes,并且类似地处理no。

这里,“yes”和“no”指的是ifelse中通用的使用参数。

ifelse(test, yes, no)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接