2017-11-05 1 views
0

Ich habe vor kurzem mit der Programmierung in R begonnen und versuche, Steigungen für einen Datensatz zu berechnen. Das ist mein Code:Erstellen von for-Schleifen in R mit Subset-Daten

slopes<- vector() 
gdd.values <- length(unique(data.gdd$GDD)) 
for (i in 1:gdd.values){ 
    subset.data <- data.gdd[which(data.gdd$GDD==i),] 
    volume <- apply(subset.data[,4,6],1,prod) 
    species.richness <- apply(subset.data[,7:59],1,sum) 
    slopes[i] <- lm(log(species.richness) ~ log(volume))$coefficients[2] 
} 

Wenn ich es laufe, bleibt der "Neigungs" -Wert leer. Alle anderen Werte sind in Ordnung (keine anderen leeren Sätze). Lassen Sie mich wissen, wenn Sie offensichtliche Fehler finden. Danke

+1

Einschließlich [minimal reproduzierbaren Beispiel] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) in Ihrer Frage wird Ihre Chancen auf eine Antwort zu erhöhen. – jsb

+2

Dies ist definitiv nicht der beste Weg, um das zu tun, was Sie tun möchten. Könnten Sie bitte die Struktur Ihrer Daten angeben? So können wir Ihnen Hinweise geben – JRR

+1

Sollte 'gdd.values ​​<- unique (data.gdd $ GDD)' und 'for (i in gdd.values)' sein. – Renu

Antwort

0

Derzeit iterieren Sie über die Länge von eindeutigen Werten und nicht eindeutigen Werten selbst. So, wie @RobJensen Kommentare, passen Sie den for Loop-Vektor und Iteration. Daher gibt einige oder alle zurückgegebenen Werte fehl, da subset.data keine Zeilen aufgrund von ungenauem Filter enthalten kann.

jedoch erwägen, einen schlankeren Ansatz der oft zu wenig genutzt und übersehen by()-Datensatz durch benötigt Gruppierungsfaktor der Teilmenge (n) und binden zurückgegebenen Liste in einen Vektor:

coeff_list <- by(data.gdd, data.gdd$GDD, FUN=function(df) { 
    volume <- apply(df[,4,6],1,prod) 
    species.richness <- apply(df[,7:59],1,sum) 
    lm(log(species.richness) ~ log(volume))$coefficients[2] 
}) 

slopes <- do.call(c, coeff_list)