【发布时间】:2016-07-18 12:35:37
【问题描述】:
以 R 中的列表为例
A=list()
A[[1]]=c(1,2)
A[[2]]=c(3,4)
是否可以返回一个向量,该向量给出列表中每个条目的第一个元素(此处为c(1,3))?
作为扩展:如果列表的元素不仅仅是向量而是矩阵,那又如何呢?是否可以获得包含每个矩阵第二行第一个元素的向量?
【问题讨论】:
-
c(A[[1]][1],A[[2]][1])
以 R 中的列表为例
A=list()
A[[1]]=c(1,2)
A[[2]]=c(3,4)
是否可以返回一个向量,该向量给出列表中每个条目的第一个元素(此处为c(1,3))?
作为扩展:如果列表的元素不仅仅是向量而是矩阵,那又如何呢?是否可以获得包含每个矩阵第二行第一个元素的向量?
【问题讨论】:
A=list()
A[[1]]=c(1,2)
A[[2]]=c(3,4)
A[[3]]=c(5,6)
A
# [[1]]
# [1] 1 2
# [[2]]
# [1] 3 4
# [[3]]
# [1] 5 6
我。仅对第一个元素使用 sapply() 函数的第一个解决方案
sapply(A,'[[',1)
# [1] 1 3 5
对于获取让我们说每个嵌套列表的第 1、第 3、第 4 个元素。不适用于本例
sapply(A,`[`,c(1,3,4))
二。使用for 循环的第二种解决方案
for(i in 1:length(A)){
print (A[[i]][1])
}
# [1] 1
# [1] 3
# [1] 5
【讨论】:
sapply() 获取包含嵌套列表对象所有第一个元素的向量形式。
试试下面这个:
sapply(A, "[", 1)
【讨论】:
你也可以这样做:
unlist(lapply(A, "[[", 1))
# [1] 1 3
对于第二个元素:
unlist(lapply(A, "[[", 2))
# [1] 2 4
为所有人做到这一点:
t(sapply(seq_along(A[[1]]), function(x) unlist(lapply(A, "[[", x))))
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
【讨论】:
不是最优雅的,但你可以使用 as.data.frame() 将列表转换为数据框,然后提取第一行。
A=list()
A[[1]]=c(1,2)
A[[2]]=c(3,4)
b<-as.vector(as.data.frame(A)[1,])
b
c.1..2. c.3..4.
1 1 3
【讨论】: