考虑R中的列表,例如
A=list()
A[[1]]=c(1,2)
A[[2]]=c(3,4)
是否可以返回一个向量,该向量给出列表中每个条目的第一个元素(这里是c(1,3)
)?
作为扩展:如果列表的元素不仅仅是向量而是矩阵,那该怎么办?是否有可能获得包含每个矩阵第二行第一个元素的向量?
答案 0 :(得分:9)
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
For Getting让我们说出每个嵌套列表的第1,第3,第4个元素。不适用于此示例
sapply(A,`[`,c(1,3,4))
II。使用for
循环
for(i in 1:length(A)){
print (A[[i]][1])
}
# [1] 1
# [1] 3
# [1] 5
答案 1 :(得分:4)
请尝试以下方法:
sapply(A, "[", 1)
答案 2 :(得分: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
答案 3 :(得分:0)
不是最优雅的,但您可以使用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