Как индексировать элемент объекта списка в R

Я делаю следующее, чтобы импортировать некоторые txt-таблицы и сохранить их как список:

# 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

Я хочу получить доступ к одному определенному элементу, допустим, hypo_list [1]. Поскольку каждый элемент представляет собой таблицу, как я должен получить доступ к определенным ячейкам (строкам и столбцам)?

Я хотел бы сделать что-то вроде этого:

a<-hypo_list[1]

a[1,2]

Но я получаю следующее сообщение об ошибке:

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

Есть ли разумный способ сделать это?

Спасибо заранее!

Ответы

Ответ 1

Индексирование списка выполняется с использованием двойной скобки, т.е. hypo_list[[1]] (например, посмотрите здесь: http://www.r-tutor.com/r-introduction/list). BTW: read.table не возвращает таблицу, а фрейм данных (см. Раздел значения в ?read.table). Таким образом, у вас будет список данных, а не список объектов таблицы. Основной механизм идентичен для таблиц и dataframes, хотя.

Примечание. В R индекс для первой записи - это 1 (не 0, как на некоторых других языках).

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

Объекты таблицы

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 

Теперь со списком

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