私はベクトルを持っています:
a<-rnorm(100,0,1)
私は次のことをしたいと思います:
- 乱数を生成する
rnorm(1)
乱数が指定された定数 (例: 0.5) より小さい場合、
a[x]
大きい場合は keep に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])
ですが、 内で if ステートメントを使用する方法がわかりませんsapply()
。
誰か助けてくれませんか?
アップデート:
a[x] に 1 を加算する代わりに、a[x]+runif(1)
ifelse(rnorm(length(a)<0.5, a[x]+runif(1), a[x])
これは、条件を満たす a[x] の各要素の同じ乱数を追加します。この 2 番目の部分をベクトル化することは可能ですか?