将ifelse()应用于向量的每个元素

时间:2013-10-09 09:25:39

标签: r

我有一个矢量:

a<-rnorm(100,0,1)

我想做以下事情:

  1. 生成随机数rnorm(1)
  2. 如果随机数小于指定的常数(例如0.5),则如果a[x]更大,则向a[x]添加1,保留if (rnorm(1) < 0.5) a[x]+1 else a[x]ifelse( rnorm(1)<0.5, a[x]+1, a[x])

  3. 为。

  4. 的每个元素执行此操作

    我在考虑使用ifelse()

    但是,

    sapply(1:length(a), function(x) if(rnorm(1)<0.5) a[x]+1 else a[x])只返回一个元素作为输出。

    我还在考虑将它与sapply结合起来:

    sapply()但是,我不确定如何在a[x]+runif(1)中使用if语句。

    有人可以帮忙吗?

    更新

    如果不想在[x]中添加1而我想添加ifelse(rnorm(length(a)<0.5, a[x]+runif(1), a[x])

    {{1}}

    这将添加满足条件的[x]的每个元素的相同随机数。是否有可能对第二部分进行矢量化?

1 个答案:

答案 0 :(得分:2)

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

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

ifelse( rnorm(length(a))<0.5, a+1, a)