0
我正在运行一个模拟,它以1列开始的矩阵取值。然后我通过选择标准,然后从矩阵的每一行中,它随机从输出中选择一个值,并保存随机选择。由于某些原因,当我将sample()应用于具有实数和NA的行上的矩阵时,它会返回一个甚至无法采样的数字。我可能做了一些错误的sample()函数,但我不明白这个未知值来自哪里。R:在应用中使用示例函数的奇怪结果
示例代码:
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
我不想让我将其更改为NA,然后应用样品()函数到每个行到返回一个值以包括任何0值。
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来我知道的无处不在。
有没有人知道当我拿这个样本时我犯了什么错误?
哎呀之前大于1,增加他们在那里 – Kevin
我觉得你只是想避免使用'sample'时只有1件物品。这似乎给了你后面的内容:矩阵(应用(xn,1,function(x){if(length(x [!is.na(x)])> 1){sample(x [!is。 na(x)],size = k)} else x [!is.na(x)]}),ncol = k)' – GSee
这种行为在文档中有明确说明; '?sample':“如果x的长度为1,是数字(在is.numeric的意义上)且x> = 1,则通过样本的采样从1:x开始。 –