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

Posted

技术标签:

【中文标题】如何在R中索引列表对象的元素【英文标题】:How to index an element of a list object in R 【发布时间】:2014-02-01 04:38:58 【问题描述】:

我正在执行以下操作以导入一些 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)。顺便说一句: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 

【讨论】:

索引从 '1' 而不是 '0' 开始对于开发人员来说可能并不明显 @KarlP 相反,从 0 开始计数不是自然的 :) 很公平:-D 对于使用具有“系统”语言(汇编、C 等,直至 Java、Swift)以及 lisp 语言、BASIC、以及几乎所有现有的“通用”编程语言,如 perl、php 等。专业工具,如 Matlab,以及其他为 COBOL(!)等目的而制作的原始非技术语言,还有 FORTRAN、统计语言等,通常从 1 开始索引。IBM 等的“委员会设计”语言也是如此。 @Karlp 曾说过“为开发人员” - 所以从 1 开始索引就像从后座开车一样。

以上是关于如何在R中索引列表对象的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在不跟踪索引的情况下将元素附加到列表?

R语言数据结构

R - 如何从函数列表中删除元素

如何将元素添加到R中的列表(循环)[重复]

R语言笔记——索引运算符

如何在python列表中查找某个元素的索引