gpt4 book ai didi

r - 从 R 列表中的矩阵中提取列

转载 作者:行者123 更新时间:2023-12-02 18:20:26 27 4
gpt4 key购买 nike

我有一个包含 100 个元素的列表。每个元素都是一个列表。这个列表中有两个元素。一个只是一个键,另一个是一个矩阵。该矩阵有 5 列。我试图从每个矩阵中提取所有元素的一列。所以基本上我会再次将 100 个矩阵作为列表的元素。这就是列表的样子

a[[1]]
[[1]]
[1] "keyid"

[[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] "1329397986.572332" "x" "y" "z" "a"
[2,] "1329242747.368294" "x" "y" "z" "a"
[3,] "1329194224.351232 "x" "y" "z" "a"

所以你在这里看到的是一个列表,它有 100 个元素。每个元素都是 2 个元素的列表。我目前只对第二个元素感兴趣。第二个元素有一个矩阵。我想提取该矩阵的第一列。只是为了看看我是否可以将列提取到我可以做的向量中

a[[1]][[2]][,1] 

我将所有值作为向量获取,如下所示。

a[[1]][[2]][,1]  
[1] "1329397986.572332" "1329242747.368294" "1329194224.351232"

但是当我这样做时

 x <- lapply(a,function(r){r[[2]][,1]})

以下是我收到的错误。

> x <- lapply(a, function(r){r[[2]][,1]})
Error in r[[2]][, 1] : incorrect number of dimensions

我不知道为什么我会得到这个。我检查了矩阵元素的尺寸。

> dim(a[[1]][[2]])
[1] 52 5

看起来是正确的。所以我不确定错误在哪里。

dput(a) 给出

dput(a)
[[1]]
[[1]][[1]]
[1] "keyid"

[[1]][[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] "1329397986.572332" "x" "y" "z" "a"
[2,] "1329242747.368294" "x" "y" "z" "a"
[3,] "1329194224.351232" "x" "y" "z" "a"

[[2]]
[[2]][[1]]
[1] "keyid"

[[2]][[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] "1329397986.572332" "x" "y" "z" "a"
[2,] "1329242747.368294" "x" "y" "z" "a"
[3,] "1329194224.351232" "x" "y" "z" "a"

...

[[100]]
[[100]][[1]]
[1] "keyid"

[[100]][[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] "1329397986.572332" "x" "y" "z" "a"
[2,] "1329242747.368294" "x" "y" "z" "a"
[3,] "1329194224.351232" "x" "y" "z" "a"

最佳答案

这似乎是很少使用的函数rapply的完美案例。

在发布可重现的示例之前,我会将其作为可能的解决方案发布

set.seed(1)
# a possible reproducible example
a <- replicate(5, list('a', matrix(runif(10), ncol=5)), simplify = FALSE)

# the first column
a1 <- rapply(a, classes = 'matrix', how = 'list', f = function(x) x[, 1, drop = FALSE])
# a second `lapply` is required to drop `NULL` entries

a1Only <- lapply(a1, Filter, f = Negate(is.null))

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

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