运行后我得到了意想不到的结果:
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
,但yes
中ifelse(test, yes, no)
的索引会被转换。也许我需要更多咖啡,但如果有人能解释这个结果背后的逻辑,我将不胜感激。
答案 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)