运行后我得到了一个意外的结果:
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
的索引被调换了。也许我需要多喝咖啡,但如果有人能解释这个结果背后的逻辑,我会很感激。运行后我得到了一个意外的结果:
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
的索引被调换了。也许我需要多喝咖啡,但如果有人能解释这个结果背后的逻辑,我会很感激。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)