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開始。 –