为什么R的ifelse语句不能返回向量?
我发现R的ifelse语句时不时会很方便。 例如:
ifelse(TRUE,1,2) # [1] 1 ifelse(FALSE,1,2) # [1] 2 但是,我有点困惑的下列行为。
 ifelse(TRUE,c(1,2),c(3,4)) # [1] 1 ifelse(FALSE,c(1,2),c(3,4)) # [1] 3 
这是一个deviseselect是否在我的薪酬级别之上?
ifelse的文档说明:
ifelse返回一个具有相同形状的值,这个值是用从yes或noselect的元素填充的,这取决于test的元素是TRUE还是FALSE。
由于您传递的是长度为1的testing值,因此您将获得长度为1的结果。如果您传递的testing向量较长,则会得到较长的结果:
 > ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4)) [1] 1 4 
 我打赌你想要一个简单的if语句而不是ifelse – 在R中, if不仅仅是一个控制stream结构,它可以返回一个值: 
 > if(TRUE) c(1,2) else c(3,4) [1] 1 2 > if(FALSE) c(1,2) else c(3,4) [1] 3 4 
是的,我认为ifelse()是真正的devise,当你有一个很长的testing向量,并希望映射到两个选项之一。 例如,我经常以这种方式为plot()做颜色:
 plot(x,y, col = ifelse(x>2, 'red', 'blue')) 
 如果你有一个很长的testing向量,但想要输出对,你可以使用sapply()或者plyr的llply()等等。 
 有时用户只需要一个switch语句而不是一个ifelse 。 在这种情况下: 
 condition <- TRUE switch(2-condition, c(1, 2), c(3, 4)) #### [1] 1 2 
(这是Ken Williams答案的另一个语法选项)