gpt4 book ai didi

r - 从由列表组成的列表中提取列

转载 作者:行者123 更新时间:2023-12-03 23:10:31 25 4
gpt4 key购买 nike

a 是一个包含列表的列表:

a<-list(list(matrix(c(0,0,0,1,2,1,2,2,2,1,1,1),3),
matrix(c(0,0,1,2,2,2,2,1),2)),
list(matrix(c(0,0,1,2,2,1,1,1,2,2,2,2),3)))

> a
[[1]]
[[1]][[1]]
[,1] [,2] [,3] [,4]
[1,] 0 1 2 1
[2,] 0 2 2 1
[3,] 0 1 2 1

[[1]][[2]]
[,1] [,2] [,3] [,4]
[1,] 0 1 2 2
[2,] 0 2 2 1


[[2]]
[[2]][[1]]
[,1] [,2] [,3] [,4]
[1,] 0 2 1 2
[2,] 0 2 1 2
[3,] 1 1 2 2

我想提取所有对象的第一列。我们知道如果列表是由矩阵组成的,我们可以用“Map”函数来解决这个问题,但是现在列表是由列表组成的,我们不能只用“Map”来解决这个问题,我该怎么办这么容易?

我使用下面的代码来解决这个问题:

sapply(1:length(a), function(x) {Map(function(y) y[,1],a[[x]])})

可以解决,但是我想知道有没有更方便的方法来解决这个问题,因为我需要根据这个问题做更多的工作。谢谢!

最佳答案

我认为以下方法可行:

sapply(unlist(a, recursive = FALSE), function(x) x[ , 1])

# [[1]]
# [1] 0 0 0
#
# [[2]]
# [1] 0 0
#
# [[3]]
# [1] 0 0 1

如果 a 上的嵌套超出一层,这将不起作用。

@rawr 的解决方案允许我们使用 rapply 保留原始 list 结构,请参阅 ?rapply更多:

rapply(a, function(x) x[,1], how = "list")
# [[1]]
# [[1]][[1]]
# [1] 0 0 0
#
# [[1]][[2]]
# [1] 0 0
#
#
# [[2]]
# [[2]][[1]]
# [1] 0 0 1

关于r - 从由列表组成的列表中提取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com