我正在运行一个模拟,该模拟从一个以 1 列开始的矩阵中获取值样本。然后我将它们通过选择标准,然后从矩阵中的每一行中随机选择输出中的一个值并保存该随机选择。出于某种原因,当我sample
在具有实数和 a 的行上应用矩阵时NA
,它会返回一个甚至无法采样的数字。我可能对函数做错了sample
,但我不明白这个未知值的来源。
示例代码:
theta <- c(30, 84, 159, 32, 60, 97)
omega <- 0.01
k <- 1
xn <- matrix(c(30, 84, 159, 32, 60, 97), ncol=1)
dup <- xn * 2
set.seed(1)
z <- matrix(rbinom(n=rep(1,length(dup)),size = as.vector(dup),prob = 0.5),nrow = nrow(dup))
z1 <- dup - z
xn <- cbind(z, z1) # put both in a matrix
W <- exp( -(1/2)*( ( ( xn - theta ) / theta ) ^2 / omega ) )
set.seed(1)
Z <- matrix(rbinom(nrow(W) * ncol(W), 1, W), nrow=nrow(W), ncol=ncol(W) )
xn <- ifelse ( Z == 0, 0, xn )
xn
[,1] [,2]
[1,] 32 0
[2,] 78 0
[3,] 144 0
[4,] 0 30
[5,] 60 60
[6,] 92 102
我不想包含任何 0 值,所以我将它们更改为NA
然后将sample
函数应用于每一行以返回单个值。
xn[which(xn==0)] <- NA
set.seed(1)
xn2 <- matrix(apply(xn, 1, function(x){sample(x[!is.na(x)], size = k)}), ncol = k)
我应该得到的是
xn
[,1]
[1,] 32
[2,] 78
[3,] 144
[4,] 30
[5,] 60
[6,] 102
但我得到的是:
xn
[,1]
[1,] 9
[2,] 30
[3,] 83
[4,] 24
[5,] 60
[6,] 102
具体来说,在这个例子中,值 9、23、55 和 24 是从我所知道的无处出现的。
有谁知道我在拿这个样本时犯了什么错误?