webentwicklung-frage-antwort-db.com.de

So indizieren Sie ein Element eines Listenobjekts in R

Ich mache folgendes, um einige txt-Tabellen zu importieren und sie als Liste zu behalten:

# set working directory - the folder where all selection tables are stored
hypo_selections<-list.files() # change object name according to each species
hypo_list<-lapply(hypo_selections,read.table,sep="\t",header=T) # change object name according to each species

Ich möchte auf ein bestimmtes Element zugreifen, sagen wir hypo_list [1]. Wie soll ich vorgehen, um auf bestimmte Zellen (Zeilen und Spalten) zuzugreifen, da jedes Element eine Tabelle darstellt?

Ich würde gerne so etwas machen:

a<-hypo_list[1]

a[1,2]

Aber ich bekomme folgende Fehlermeldung:

Error in a[1, 2] : incorrect number of dimensions

Gibt es eine clevere Möglichkeit, dies zu tun?

Danke im Voraus!

20
Mohr

Die Indizierung einer Liste erfolgt in doppelter Klammer, d. H. hypo_list[[1]] (z. B. hier nachsehen: http://www.r-tutor.com/r-introduction/list ). BTW: read.table gibt keine Tabelle sondern einen Datenrahmen zurück (siehe Werteabschnitt in ?read.table). Sie haben also eine Liste von Datenrahmen und keine Liste von Tabellenobjekten. Der Hauptmechanismus ist jedoch für Tabellen und Datenrahmen identisch.

Hinweis : In R ist der Index für den ersten Eintrag ein 1 (nicht 0 wie in einigen anderen Sprachen).

Datenrahmen

l <- list(anscombe, iris)   # put dfs in list
l[[1]]             # returns anscombe dataframe

anscombe[1:2, 2]   # access first two rows and second column of dataset
[1] 10  8

l[[1]][1:2, 2]     # the same but selecting the dataframe from the list first
[1] 10  8

Tabellenobjekte

tbl1 <- table(sample(1:5, 50, rep=T))
tbl2 <- table(sample(1:5, 50, rep=T))
l <- list(tbl1, tbl2)  # put tables in a list

tbl1[1:2]              # access first two elements of table 1 

Jetzt mit der Liste

l[[1]]                 # access first table from the list

1  2  3  4  5 
9 11 12  9  9 

l[[1]][1:2]            # access first two elements in first table

1  2 
9 11 
32
Mark Heckmann