Search code examples
rlistindexinglapplyread.table

How to index an element of a list object in R


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?


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