2014-01-13 8 views
16

ich folgendes zu importieren, um einige txt Tabellen und halten sie als Liste so mache:Wie Index ein Element einer Liste Objekt in R

# 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 ein bestimmtes Element zugreifen möchten, lassen Sie uns sagen hypo_list [1]. Da jedes Element eine Tabelle darstellt, wie soll ich vorgehen, um auf bestimmte Zellen (Zeilen und Spalten) zuzugreifen?

Ich mag so etwas wie es tun:

a<-hypo_list[1] 

a[1,2] 

Aber ich bekomme die folgende Fehlermeldung:

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

Gibt es einen cleveren Weg, es zu tun?

Vielen Dank im Voraus!

Antwort

28

Indizierung einer Liste erfolgt mit Doppelklammer, d. H. hypo_list[[1]] (z. B. hier: http://www.r-tutor.com/r-introduction/list). BTW: read.table gibt keine Tabelle zurück, sondern einen Datenrahmen (siehe Wert in ?read.table). Sie erhalten also eine Liste von Datenrahmen anstelle einer Liste von Tabellenobjekten. Der prinzipielle Mechanismus 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).

Dataframes

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 

Tabelle

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 
+8

Objekte für einen Entwickler möglicherweise nicht offensichtlich sein, dass die Indizierung von '1' beginnt und nicht '0' – KarlP

+1

@KarlP Im Gegensatz dazu ist es nicht Natur, etwas von 0 zu zählen :) – Verbal

+1

Fair genug :-D Nicht offensichtlich für Entwickler, die Programmiersprachen mit einem Erbe von "System" Sprachen (Assembly, C, etc, bis zu Java, Swift), und auch Lisp-Sprachen, BASIC, und fast jede "generische" Programmiersprache wie Perl, PHP, etc usw. Spezialisierte Werkzeuge, wie Matlab, und andere originale nichttechnische Sprachen, die für einen bestimmten Zweck gemacht wurden B. COBOL (!), aber auch FORTRAN, statistische Sprachen usw., typischerweise Index von 1. Wie "design by committee" -Sprachen von IBM usw. – KarlP