Ich bin neu in R, das kann eine dumme Frage sein, aber ich weiß nicht, wie ich es lösen soll.Wie man Ergebnis in einer Liste von einer For-Schleife speichern
Ich habe eine for-Schleife, die möglicherweise i * j nicht-leere Elemente zurückgibt.
Ich möchte alle nicht leeren Ergebnis in einer Liste speichern, aber wenn ich result[[i]]<-tmp
in der Schleife verwenden, kann es nur bis zu i
Elemente speichern, wie kann ich alle Werte in einer Liste speichern? Dank
result<-list()
for (i in 1:nrow(m)){
for (j in 1:i){
if(m[i,j]!=0 && m[j,i]!=0){
num=min(m[i,j],m[j,i])
tmp=c(i,j,num)
result[[i]]<-tmp
}
}
}
sample data
set.seed(123)
m= matrix(sample(0:5, size = 5*5, replace = TRUE), ncol = 5)
Wunsch
row col min
[1] 1 1 1
[1] 2 2 3
[1] 3 1 2
[1] 3 2 2
[1] 3 3 4
[1] 4 1 5
[1] 4 2 1
[1] 4 4 1
[1] 5 1 5
[1] 5 2 2
[1] 5 4 5
[1] 5 5 3
Per David Antwort
pmin(mx[upper.tri(mx, diag = TRUE)], mx[lower.tri(mx, diag = TRUE)])
[1] 1 0 2 5 2 3 5 1 0 1 3 0 1 5 3
kehrt
> result
[[1]]
[1] 1 1 2
[[2]]
[1] 2 2 3
[[3]]
[1] 3 3 4
[[4]]
[1] 4 4 2
[[5]]
[1] 5 5 4
Für Schleifen und wachsenden Listen in R sind beide sehr langsam gibt. Können Sie Ihren Algorithmus als eine Funktion über jedes Element der Matrix überdenken und 'apply()' verwenden? –
Rechnen Sie nicht 'pmin (m, t (m))' '? –
Ich bin mir nicht sicher, was Sie versuchen zu tun und was genau nicht funktioniert. Sie brauchen auch keinen so großen Datensatz, um Ihr Problem zu reproduzieren. Ich denke etwas wie m = matrix (sample.int (5, size = 5 * 5, ersetzen = TRUE), ncol = 5) sollte tun. Verwende auch 'set.seed' und zeige, was du von deiner' for'-Schleife erwartest. –