0

我通过二项式概率表达式将一些值放入矩阵中。问题是我有一些 NA 值需要保留在我的矩阵中,但是 rbinom() 在输入 NA 时返回错误。

我的算法包括以下内容:

  • (1) 从一列中的值矩阵开始。
  • (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 获取结果并将它们放回新矩阵中的相同位置,因为 dup 值被输入到 rbinom()。

如果这没有任何意义。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 回答