为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

呼唤远方 2019-09-10 12:40:09

为什么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

ifelse各州的文件:

ifelse返回一个具有相同形状的值,该值test填充了从中选择的元素yes或 no取决于元素是否testTRUEFALSE

由于您传递长度为1的测试值,因此您将获得长度为1的结果。如果传递更长的测试向量,则会得到更长的结果:

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

因此ifelse,其目的是测试布尔值向量并返回相同长度的向量,填充从(向量)yesno参数中获取的元素。

由于函数的名称,这是一个常见的混淆,当你真的只想要一个正常的if () {} else {}结构时使用它。



查看完整回答
反对 回复 2019-09-10
?
慕码人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



查看完整回答
反对 回复 2019-09-10
?
守着星空守着你

请注意,如果在以下内容中分配结果,则可以避免此问题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



查看完整回答
反对 回复 2019-09-10
  • 3 回答
  • 0 关注
  • 123 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信