Mögliches Duplikat:
Zufällige Auswahl von Werten aus einer bestehenden Matrix nach Hinzufügen eines Vektors (in R)
Dies ist eine Folgefrage zu meiner Frage von letzter Woche und findet sich unter aquí . Ich war mir nicht sicher, ob es angemessen ist, diese Frage an der gleichen Stelle zu stellen oder sie als neue Frage zu stellen.
Okay, das letzte Mal habe ich nach dem zufälligen Entfernen von Werten aus einer Matrix gefragt, nachdem ich einen neuen Vektor damit verbunden habe. Die Antworten waren sehr nützlich, aber ich habe einen Fehler gefunden, wenn ich eine nicht quadratische Matrix verwende. Ich habe den Code in einer Schleife laufen lassen und jedes Mal die Summe der Matrix genommen, um sicherzustellen, dass er richtig funktioniert, aber ich habe festgestellt, dass die Summe variiert, was bedeuten würde, dass der Code manchmal den falschen Wert in der Matrix auswählt (ich möchte, dass er nur Einsen auswählt und ersetzt).
Hier ist der Code:
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)
}
In diesem Fall ist die Summe der Matrix manchmal 13 und manchmal 14, obwohl sie immer = sum(mat1) = 13 sein sollte.
Ich habe versucht, den Code auseinanderzunehmen, und ich denke, dass alles richtig funktioniert, außer der Funktion rows, die ich zugegebenermaßen nicht ganz verstehe.