提问人:cliu 提问时间:1/25/2022 更新时间:1/25/2022 访问量:42
如何仅将列表中的行矩阵转换为R中的列矩阵?
How to convert only row matrices in a list to column matrices in R?
问:
我有一个矩阵列表,其中大多数矩阵是列矩阵,但其中一些是行矩阵。如何仅将那些行矩阵转换为列矩阵?我想使用基础 R 来实现这一点。
这是矩阵列表,其中第三个矩阵是行矩阵
x <- list(`1` = matrix(1:20, nrow=5), `2` = matrix(1:20, nrow=10), `3` = matrix(1:5, nrow=1))
如何将列表转换为这样的列表:
$`1`
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
$`2`
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
$`3`
[1,] 1
[2,] 2
[3,] 3
[4,] 4
[5,] 5
我有一个更大的数据集,所以高效的代码是首选!
答:
1赞
dcarlson
1/25/2022
#1
检查矩阵的维度,如果行维度为 1,则对其进行转置:
(y <- lapply(x, function(x) if(dim(x)[1] == 1) { t(x)} else x))
# $`1`
# [,1] [,2] [,3] [,4]
# [1,] 1 6 11 16
# [2,] 2 7 12 17
# [3,] 3 8 13 18
# [4,] 4 9 14 19
# [5,] 5 10 15 20
#
# $`2`
# [,1] [,2]
# [1,] 1 11
# [2,] 2 12
# [3,] 3 13
# [4,] 4 14
# [5,] 5 15
# [6,] 6 16
# [7,] 7 17
# [8,] 8 18
# [9,] 9 19
# [10,] 10 20
#
# $`3`
# [,1]
# [1,] 1
# [2,] 2
# [3,] 3
# [4,] 4
# [5,] 5
评论
0赞
cliu
1/25/2022
谢谢你@dcarlson。这确实适用于我在这里的示例数据。不过还有一个问题。当我检查使用中的条件时,它显示 .难道不应该挑出适合条件的元素吗?if
dim(x)[1] == 1
logical(0)
1赞
dcarlson
1/26/2022
是的,但是在里面,the 表示列表中的每个矩阵,即 , , x[[3]]x' 是一个列表,为 NULL。我应该在函数中使用不同的参数来更清楚地说明这一点,例如.function(x)
lapply()
x
x
x[[1]]
x[[2]]
. Since your
dim(x)
function(y) if(dim(y)[1] == 1) { t(y)} else y)
0赞
cliu
1/26/2022
谢谢你的澄清!
评论