我有一个向量:
a<-rnorm(100,0,1)
我想做以下事情:
- 生成一个随机数
rnorm(1)
如果随机数小于指定的常数(例如 0.5),则将 1 添加到
a[x]
if 它更大 keepa[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()
.
有人可以帮忙吗?
更新:
如果我不想将 1 添加到 a[x] 我想添加a[x]+runif(1)
ifelse(rnorm(length(a)<0.5, a[x]+runif(1), a[x])
这将添加满足条件的 a[x] 的每个元素的相同随机数。是否可以对第二部分进行矢量化?