Ich habe den folgenden Code mit mir. Dieser Code wurde ursprünglich in MATLAB geschrieben. Ich habe zwei Fragen hier:MATLAB zu R Konvertierung: Anhängen von Werten an ein vorhandenes leeres Array durch for-Schleife
1) Was wäre der entsprechende Befehl in R für den folgenden Befehl in MATLAB sein:
duet(i).p = [];
2) Im folgenden Code, den ich alle richtigen 6 Werte für duet$n
bin immer , aber ich bekomme keine korrekten Werte für duet$p
. Meine Frage ist, wie man die Werte an ein leeres existierendes Array duet$p[i]
in R durch die for-Schleife-Iterationen anfügt.
Diese Linie arbeitet nicht in dem unten stehenden Code:
duet$p[i] <- c(duet$p[i],j)
ich auch duet$p[i] <- array()
erklärt haben, falsch könnten.
Die Werte für duet.n
und duet.p
von MATLAB sind:
duet.n
2 0 2 0 1 3
duet.p
[] [3,6] [] [1,3,5,6] [1,6] []
In R, erhalte ich duet$n
Werte richtig, aber ich bin nicht in der Lage die Array Art von Ergebnissen für duet$p
zu bekommen.
Jede Hilfe, die duet$p
Werte erhalten würde geschätzt.
x <- matrix(c(-1,2,4,1,7,4.2,3,0,1.2,-1.2,5.1,4,2,3.1,1.1,1,1,9,0,1,2,2,8,1,2,2,2,2,2,2),nrow=6,ncol=5,byrow=T)
fro=1;N=6;M=2;V=3;
F <- list(f=c())
duet = list()
for (i = 1 : N){
duet$n[i] = 0
duet$p[i] = array() ## Create an empty array
for (j in 1 : N){
dl = 0
de = 0
dm = 0
for (k = 1 : M){
if (x[i,V + k] < x[j,V + k]){
dl = dl + 1
} else if (x[i,V + k] == x[j,V + k]){
de = de + 1
} else{
dm = dm + 1
}
}
if (dl == 0 & de != M){
duet$n[i] = duet$n[i] + 1
} else if (dm == 0 & de != M){
duet$p[i] = c(duet$p[i],j)
}
}
if (duet$n[i] == 0){
x[i,6] = 1
F$f = c(F$f,i)
}
}
„Anhängen von Werten an ein vorhandenes leeres Array durch for-Schleife“ 1) Sie sollten sehr hart versuchen, eine vektorisiert Alternative zu der Schleife zu finden. 2) Sie sollten niemals ein Objekt in einer Schleife wachsen lassen (das ist eine der langsamsten Operationen, die in einer Programmiersprache möglich ist), wenn Sie die endgültige Größe kennen oder schätzen können. Ordnen Sie die Datenstruktur vor und füllen Sie sie aus. Wie auch immer, anstatt einer engen Übersetzung von Matlab-Code, überlegen Sie, was dieser Code macht, schreiben Sie ihn auf eine R-ish-Art um und testen Sie, ob der R-Code identische Ergebnisse liefert. – Roland