如何在R中索引列表对象的元素

30

我正在执行以下步骤,以便导入一些文本表并将它们保留为列表:

# 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个回答

43
使用双括号进行列表索引,如hypo_list[[1]](例如,请看这里:http://www.r-tutor.com/r-introduction/list)。顺便提一句:read.table不返回表格而是数据框架(请参见?read.table中的值部分)。因此,您将获得数据框架的列表,而不是表对象的列表。不过,对于表格和数据框架来说,主要机制是相同的。

注意:在R中,第一个条目的索引为1(而不是像其他一些语言中的0)。

数据框架

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 

14
对于开发人员来说,可能并不明显的是索引从“1”而不是“0”开始。 - KarlP
4
相反,从0开始计数并不是自然的做法。 - Verbal
4
好的 :-D 对于那些使用源自“系统”语言(汇编,C等,一直到Java、Swift),以及Lisp语言、BASIC和几乎所有现有的“通用”编程语言(如Perl、PHP等)的开发人员来说,并不明显。另外,一些专业工具例如Matlab和其他为特定目的创建的非技术性语言(例如COBOL!)以及FORTRAN和统计语言等通常从1开始索引。像IBM等公司开发的“委员会设计”语言也是如此。 - KarlP
2
@Karlp曾说过“对于开发者来说”,从1开始索引就像是坐在后座驾驶你的汽车。 - WestCoastProjects
1
@KarlP 谢谢你告诉我索引从1开始,否则我永远不会想到这个...谁会做出这样可怕的事情。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接