How to index an element of a list object in R

indexing, lapply, list, r, read.table

Solution

Indexing a list is done using double bracket, i.e. `hypo_list[[1]]` (e.g. have a look here: http://www.r-tutor.com/r-introduction/list). BTW: `read.table` does not return a table but a dataframe (see value section in `?read.table`). So you will have a list of dataframes, rather than a list of table objects. The principal mechanism is identical for tables and dataframes though.

Note: In R, the index for the first entry is a `1` (not `0` like in some other languages).

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

Table objects

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 

Now with the list

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 

Problem

I'm doing the following in order to import some txt tables and keep them as list: ``` # 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 ``` I want to access one specific element, let's say hypo_list[1]. Since each element represents a table, how should I procced to access particular cells (rows and columns)? I would like to do something like it: ``` a<-hypo_list[1] a[1,2] ``` But I get the following error message: ``` Error in a[1, 2] : incorrect number of dimensions ``` Is there a clever way to do it?

Original source