0

二項確率式を使用して、行列にいくつかの値を入れています。問題は、マトリックスに保持する必要があるいくつかの NA 値があることですが、NA が入力されると rbinom() がエラーを返します。

私のアルゴリズムは次のもので構成されています。

  • (1) 1 つの列の値のマトリックスから始めます。
  • (2) その行列の値を 2 倍にします。
  • (3) 0.5 の二項確率からランダムな値を選択します。
  • ...不要なものがいくつかあります

再現可能な例を次に示します。

set.seed(10)
xn <- matrix(c(NA, 100, 100, 100, 100, NA, NA, 100, 100, NA), byrow=TRUE, ncol=2)
dup <- xn * 2 
z <- matrix(rbinom(n=rep(1,length(dup)), size = as.vector(dup), prob = 0.5), nrow = nrow(dup))
Warning message:
In rbinom(n = rep(1, length(dup)), size = as.vector(dup), prob = 0.5) :
  NAs produced

実際の値を持つマトリックスの値のみを選択することを考えました。

set.seed(6)
xn_bin <- rbinom(n=rep(1,length(dup[-which(is.na(dup))])), size = as.vector(dup[-which(is.na(dup))]),prob = 0.5)

xn_bin から結果を取得し、rbinom() に入力された dup 値と同じ位置にそれらを新しいマトリックスに戻す必要があるため、マトリックスを元に戻す方法がわかりません。

それが意味をなさない場合。xn_bin は次の値を返します: xn_bin [1] 101 115 112 98 103 103

dup は以下を提供します:

dup
     [,1] [,2]
[1,]   NA  200
[2,]  200  200
[3,]  200   NA
[4,]   NA  200
[5,]  200   NA

最終的な行列に xn_bin からの値と xn からの NA 値を持たせたい:

         [,1] [,2]
[1,]   NA   101
[2,]   115  112
[3,]   98   NA
[4,]   NA   103
[5,]   103  NA

これを効果的に行う方法はありますか?

4

1 に答える 1

0

順序は同じではありませんが、マトリックス構造内の位置は希望どおりであり、これは位置によって決定されるべきではないランダムなプロセスであるため、この結果が順序付けほど有効ではない理由がわかりません (R マトリックスが満たされている行単位ではなく列単位):

 xn_bin <- z

 set.seed(6)
 xn_bin[ !is.na(z) ] <- rbinom(n=rep(1,length(dup[-which(is.na(dup))])), 
                               size = as.vector(dup[-which(is.na(dup))]),prob = 0.5)
 xn_bin
     [,1] [,2]
[1,]  NaN   98
[2,]  101  103
[3,]  115  NaN
[4,]  NaN  103
[5,]  112  NaN
于 2012-11-07T06:45:58.563 に答える