在R-单个数值而不是列表中奇怪输出ifelse

时间:2017-06-20 15:21:39

标签: r list if-statement

在编写函数时,我需要编写以下内容:

x<-rnorm(10)
y<-ifelse(mean(x)>=0,rexp(10,1/mean(x)),-rexp(10,-1/mean(x)))

与x一样,我希望y是一个长度为10的向量,但令人惊讶的是它只输出一个数值。可重复的例子如下。

set.seed(10)
x<-rnorm(10)
y<-ifelse(mean(x)>=0,rexp(10,1/mean(x)),-rexp(10,-1/mean(x)))

> x
 [1]  0.01874617 -0.18425254 -1.37133055 -0.59916772  0.29454513  0.38979430
 [7] -1.20807618 -0.36367602 -1.62667268 -0.25647839

y<-ifelse(mean(x)>=0,rexp(10,1/mean(x)),-rexp(10,-1/mean(x)))

> y
[1] -0.2092798

我在这里缺少什么?为什么y不是长度为10的列表,即使在条件中指定了?

有趣的是,当我使用单独的if-else块编码相同的条件时,它按预期工作。但是,当以这种方式执行时,为什么没有相同的逻辑工作呢?一些澄清肯定会有所帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

ifelse只能返回一个值。请尝试使用常见的if else语句:

if(mean(x)>=0) y <- rexp(10,1/mean(x)) else y <- -rexp(10,-1/mean(x))