web-dev-qa-db-fra.com

Comment indexer un élément d'un objet liste dans R

Je fais ce qui suit afin d'importer des tables txt et de les conserver comme liste:

# 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

Je veux accéder à un élément spécifique, disons hypo_list [1]. Étant donné que chaque élément représente un tableau, comment dois-je procéder pour accéder à des cellules particulières (lignes et colonnes)?

Je voudrais faire quelque chose comme ça:

a<-hypo_list[1]

a[1,2]

Mais j'obtiens le message d'erreur suivant:

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

Existe-t-il un moyen intelligent de le faire?

Merci d'avance!

20
Mohr

L'indexation d'une liste se fait à l'aide d'un double crochet, c'est-à-dire hypo_list[[1]] (par exemple, regardez ici: http://www.r-tutor.com/r-introduction/list ). BTW: read.table ne renvoie pas une table mais une trame de données (voir la section valeur dans ?read.table). Vous aurez donc une liste de cadres de données, plutôt qu'une liste d'objets de table. Le mécanisme principal est cependant identique pour les tableaux et les cadres de données.

Remarque : Dans R, l'index de la première entrée est un 1 (ne pas 0 comme dans d'autres langues).

Cadres de données

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

Objets de table

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 

Maintenant avec la 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