我有一个矢量:
a<-rnorm(100,0,1)
我想做以下事情:
rnorm(1)
如果随机数小于指定的常数(例如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])
为。
我在考虑使用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]的每个元素的相同随机数。是否有可能对第二部分进行矢量化?
答案 0 :(得分:2)
为什么不只是a + rbinom(100,1,.5)
?
如果您需要使用ifelse
,问题是您没有将您的电话向量化为rnorm
:
ifelse( rnorm(length(a))<0.5, a+1, a)