如何在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中索引列表对象的元素的主要内容,如果未能解决你的问题,请参考以下文章