我有一个向量:
a<-rnorm(100,0,1)
我想执行以下操作:
- 生成随机数
rnorm(1)
如果随机数小于指定常数(例如 0.5),则将
a[x]
加 1如果更大则保留a[x]
:if (rnorm(1) < 0.5) a[x]+1 else a[x]
对 a 的每个元素执行此操作。
我正在考虑使用 ifelse()
ifelse( rnorm(1)<0.5, a[x]+1, a[x])
但是,这仅返回单个元素作为输出。
我也在考虑将它与 sapply 结合起来:
sapply(1:length(a), function(x) if(rnorm(1)<0.5) a[x]+1 else a[x])
,但是,我不确定如何在 sapply()
中使用 if 语句.
有人可以帮忙吗?
更新:
如果我不想将 1 加到 a[x] 上,而是想添加 a[x]+runif(1)
呢?
ifelse(rnorm(length(a)<0.5, a[x]+runif(1), a[x])
这将为 a[x] 中满足条件的每个元素添加相同的随机数。是否可以对第二部分进行矢量化?
最佳答案
为什么不只是a + rbinom(100,1,.5)
?
如果您需要使用ifelse
,问题是您没有将调用向量化为rnorm
:
ifelse( rnorm(length(a))<0.5, a+1, a)
关于r - 将 ifelse() 应用于向量的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19267986/