【发布时间】:2011-08-04 00:18:18
【问题描述】:
可能重复:
Randomly selecting values from an existing matrix after adding a vector (in R)
这是我上周提出的问题的后续,可以在here 找到。我不确定将这个问题发布在同一个地方是否合适,或者将其作为一个新问题发布。
好的,上次我询问了在将新向量绑定到矩阵后从矩阵中随机删除值的问题。答案非常有用,但是我在使用非方阵时发现了一个错误。我一直在循环运行代码并每次取矩阵的总和以确保它正常工作,但我发现总和会有所不同,这意味着代码有时会在矩阵中选择错误的值(我希望它只选择和替换那些)。
代码如下:
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 函数之外一切都正常工作,诚然,我并不完全理解。
【问题讨论】:
-
“后续问题”通常不适合本网站的格式,因为它们会导致本地化解决方案。这尤其是在后续出现与接受的答案存在问题时更是如此。一个只看到你以前的问题的人怎么会知道它没有按你的预期工作?这个网站的一大优点是你可以通过提问来帮助别人。
-
对不起!我应该完全避免发布后续内容吗?我不确定如何将其添加到另一个问题中。
-
您似乎还有两个名为“Laura”的帐户应该合并在一起:*.com/users/866870/laura 和 *.com/users/874102/laura。我会要求版主通过电子邮件 team@*.com 为您合并它们并让他们知道。
-
在这种情况下,是的,我会用您的非方阵添加到您的原始问题中,并解释什么不起作用。
-
我会投票关闭这个,虽然上面的 Q 是很好的跟进,让我看到问题相对容易出现在哪里,但我们需要修复原来的 Q&A。我现在已经做到了。我下面的答案只是保持不变,这样其他人就不会浪费时间试图解决这个问题,直到它关闭。其他人在这里评论也可以帮助关闭吗? TIA