2

私はベクトルを持っています:

a<-rnorm(100,0,1)

私は次のことをしたいと思います:

  1. 乱数を生成するrnorm(1)
  2. 乱数が指定された定数 (例: 0.5) より小さい場合、a[x]大きい場合は keep に1 を追加し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])ですが、 内で if ステートメントを使用する方法がわかりませんsapply()

誰か助けてくれませんか?

アップデート:

a[x] に 1 を加算する代わりに、a[x]+runif(1)

ifelse(rnorm(length(a)<0.5, a[x]+runif(1), a[x])

これは、条件を満たす a[x] の各要素の同じ乱数を追加します。この 2 番目の部分をベクトル化することは可能ですか?

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 に答える