为什么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这是一个超出我的薪资水平的设计选择吗?
3 回答
qq_笑_17
TA贡献1818条经验 获得超7个赞
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
TA贡献1860条经验 获得超9个赞
我打赌你想要一个简单的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
守着星空守着你
TA贡献1799条经验 获得超8个赞
请注意,如果在以下内容中分配结果,则可以避免此问题ifelse:
ifelse(TRUE, a <- c(1,2), a <- c(3,4))
a
# [1] 1 2
ifelse(FALSE, a <- c(1,2), a <- c(3,4))
a
# [1] 3 4
- 3 回答
- 0 关注
- 839 浏览
添加回答
举报
0/150
提交
取消