为什么R的ifelse语句不能返回向量?

为什么R的ifelse语句不能返回向量?

我发现R的ifelse陈述不时很方便。例如:

ifelse(TRUE,1,2)# [1] 1ifelse(FALSE,1,2)# [1] 2

但是我对以下行为感到困惑。

ifelse(TRUE,c(1,2),c(3,4))# [1] 1ifelse(FALSE,c(1,2),c(3,4))# [1] 3

这是一个超出我的薪资水平的设计选择吗?


呼唤远方
浏览 785回答 3
3回答

qq_笑_17

ifelse各州的文件:ifelse返回一个具有相同形状的值,该值test填充了从中选择的元素yes或 no取决于元素是否test为TRUE或FALSE。由于您传递长度为1的测试值,因此您将获得长度为1的结果。如果传递更长的测试向量,则会得到更长的结果:> ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4))[1] 1 4因此ifelse,其目的是测试布尔值向量并返回相同长度的向量,填充从(向量)yes和no参数中获取的元素。由于函数的名称,这是一个常见的混淆,当你真的只想要一个正常的if () {} else {}结构时使用它。

慕码人2483693

我打赌你想要一个简单的if语句而不是ifelse- 在R中,if它不仅仅是一个控制流结构,它可以返回一个值:> 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:ifelse(TRUE, a <- c(1,2), a <- c(3,4))a# [1] 1 2ifelse(FALSE, a <- c(1,2), a <- c(3,4))a# [1] 3 4
打开App,查看更多内容
随时随地看视频慕课网APP