可能重复:
在添加向量后从现有矩阵中随机选择值(在 R 中)
这是我上周提出的问题的后续,可以在这里找到。我不确定是否适合在同一个地方发布这个问题,或者将它作为一个新问题发布。
好的,上次我询问了在将新向量绑定到矩阵后从矩阵中随机删除值的问题。答案非常有用,但是我在使用非方阵时发现了一个错误。我一直在循环运行代码并每次取矩阵的总和以确保它正常工作,但我发现总和会有所不同,这意味着代码有时会在矩阵中选择错误的值(我希望它只选择和替换那些)。
这是代码:
mat1<-matrix(c(1,0,1,0, 0,1,1,1, 1,0,0,0, 1,0,0,1, 1,1,1,1, 0,0,0,1),byrow=F, nrow=4)
I.vec<-c(0,1,1,1,0,0)
foo <- function(mat, vec) {
nr <- nrow(mat)
nc <- ncol(mat)
cols <- which(vec == 1L)
rows <- sapply(seq_along(cols),
function(x, mat, cols) {
ones <- which(mat[,cols[x]] == 1L)
sample(ones, 1)
}, mat = mat, cols = cols)
ind <- (nr*(cols-1)) + rows
mat[ind] <- 0
mat <- rbind(mat, vec)
rownames(mat) <- NULL
mat
}
set.seed(2)
for (j in 1:1000){ #run this vector through the simulations
I.vec2=sample(I.vec,replace=FALSE) #randomize interactions
temp=foo(mat1,I.vec2) #run foo function
prop=sum(temp)
print.table(prop)
}
在这种情况下,有时矩阵的和是 13,有时是 14,而它应该始终是 = sum(mat1) = 13。
我试图分解代码,我认为除了 rows 函数之外一切都正常工作,诚然,我并不完全理解。