2

我有一个向量:

a<-rnorm(100,0,1)

我想做以下事情:

  1. 生成一个随机数rnorm(1)
  2. 如果随机数小于指定的常数(例如 0.5),则将 1 添加到a[x]if 它更大 keep a[x]if (rnorm(1) < 0.5) a[x]+1 else a[x]

  3. 对 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] 的每个元素的相同随机数。是否可以对第二部分进行矢量化?

4

1 回答 1

2

为什么不只是a + rbinom(100,1,.5)

如果您需要使用ifelse,问题是您没有将您的调用矢量化为rnorm

ifelse( rnorm(length(a))<0.5, a+1, a)
于 2013-10-09T09:30:44.893 回答