2016-07-15 11 views
1

Ich habe einige Ausgabe von der vegan Funktion specaccum. Es ist eine Liste von 8 Objekten unterschiedlicher Länge;Extrahieren Sie mehrere Objekte aus der Liste in R

> str(SPECIES) 
List of 8 
$ call  : language specaccum(comm = PRETEND.DATA, method = "rarefaction") 
$ method  : chr "rarefaction" 
$ sites  : num [1:5] 1 2 3 4 5 
$ richness : num [1:5] 20.9 34.5 42.8 47.4 50 
$ sd   : num [1:5] 1.51 2.02 1.87 1.35 0 
$ perm  : NULL 
$ individuals: num [1:5] 25 50 75 100 125 
$ freq  : num [1:50] 1 2 3 2 4 3 3 3 4 2 ... 
- attr(*, "class")= chr "specaccum" 

Ich möchte drei der Listen extrahieren (‚Reichtum‘, ‚sd‘ und ‚Individuen‘) und wandeln sie in Spalten in einem Datenrahmen. Ich habe einen Workaround entwickelt.

SPECIES.rich <- data.frame(SPECIES[["richness"]]) 
SPECIES.sd <- data.frame(SPECIES[["sd"]]) 
SPECIES.individuals <- data.frame(SPECIES[["individuals"]]) 
SPECIES.df <- cbind(SPECIES.rich, SPECIES.sd, SPECIES.individuals) 

Aber das scheint plump und langwierig. Ich frage mich, ob jemand eine bessere Lösung vorschlagen könnte? (Sollte ich etwas mit Schlaf sehen?) Danke!


Beispieldaten zum Generieren des specaccum Ausgangs;

Set.Seed(100) 
PRETEND.DATA <- matrix(sample(0:1, 250, replace = TRUE), 5, 50) 
library(vegan) 
SPECIES <- specaccum(PRETEND.DATA, method = "rarefaction") 

Antwort

0

wir die Namen in einem vector verketten und entpacken Sie es

SPECIES.df <- data.frame(SPECIES[c("richness", "sd", "individuals")]) 
+1

Dank @akrun! Das sieht viel besser aus. Ich habe mit so etwas experimentiert, aber verpatzte die '(') und die '' ( – EcologyTom

0

Eine andere Alternative, ähnlich wie akrun ist:
ctoc1 = as.data.frame (cbind (ARTEN $ Reichtum, ARTEN $ sd, ARTEN $ Einzelpersonen))

Bitte beachten Sie, dass in beiden Fällen (meine Antwort und akrun) erhalten Sie einen Fehler, wenn die Längen der Spalten nicht übereinstimmen.
zB: SPECIES.df < - data.frame (ARTEN [c ("sd", "Freq")])
Fehler in data.frame (Reichtum = c (20,5549865665613, 33,5688503093388, 41,4708434700877,: Argumente implizieren unterschiedliche Anzahl der Zeilen: 7, 47

Wenn ja, denken Sie daran Länge() Funktion zu verwenden.
Länge (ARTEN $ sd) <-47 # Dies wird NAs fügen Sie die Spaltenlänge zu erhöhen
Arten. df < - data.frame (SPECIES [c ("sd", "freq")])
SPECIES.df # Datenrahmen mit 2 Spalten und 7 Zeilen.

+0

Hi @Ann, Danke für Ihre Vorschläge. Ich wusste nicht über die 'length()' Funktion, netter Tipp! – EcologyTom

Verwandte Themen