繁体   English   中英

如何将矩阵从矩阵列表转换为未列出的二维数字/矩阵而不展平为 R 中的向量?

[英]How to convert a matrix from a list of matrices to an unlisted 2D numeric/matrix without flattening to a vector in R?

所以我有一个很大的矩阵列表,我希望能够将它们一个一个地放入它们的普通 2D 单个矩阵中。 因此,假设我有一个矩阵示例列表列表。 我使用此代码获得了列表:

示例列表 <- lapply(listofimages, readImage)

这是一张 512x512 .tif 示例图像,它将是矩阵列表中的矩阵之一:

该列表如下所示:

示例矩阵列表

我想一次取出一个矩阵作为 2D 512x512 矩阵,但是当我尝试手动修剪其他数据时,它仍然是一个列表元素(单引号使索引不被引用):

a <- as.matrix(examplelist['1'])

b <- a[,]

在此处输入图片说明

当我这样做时,它会展平成一维向量:

b <- as.numeric(unlist(examplelist['1']))

在此处输入图片说明

这是 262144 x 1 而不是 512 x 512。

我尝试将其转换为数据表、数据框和其他一些内容,然后当我尝试将其设为数字​​时:

as.numeric(b)

我收到此错误:

在此处输入图片说明

使用 dput,它将其列为错误:

在此处输入图片说明

是否有一种简单的方法可以从矩阵列表中取消列出方阵,并以原始 512 x 512 形式而不是一维向量(如上所示)获得它?

我尝试修剪尺寸(如上所示)以摆脱一些其他信息,但它引发了错误。 我还尝试使用 '@' 和 '$' 仅访问数据属性,但这也不起作用。

如果我试试这个:

b <- as.data.table(examplelist['1'])

它只是给了我另一个 262144 x 1 1D 向量而不是所需的 2D 矩阵。

这个解决方案这个,不起作用,因为我不想要一个一维向量或只将元素(我想要整个矩阵)转换为数字元素。

要提取列表的元素,您需要使用双括号。 考虑下面的例子。 让我们创建一个矩阵列表。

# Dummy list
foo <- list(first = matrix(runif(16), ncol = 4),
            second = matrix(runif(16), ncol = 4))

如下所示:

# Quick peek
print(foo)
#> $first
#>           [,1]      [,2]       [,3]      [,4]
#> [1,] 0.3517863 0.1222894 0.69358440 0.7850944
#> [2,] 0.7516454 0.9881041 0.72152473 0.3035514
#> [3,] 0.8540138 0.3966431 0.40551019 0.3687717
#> [4,] 0.8872717 0.7438446 0.03258007 0.1305907
#> 
#> $second
#>            [,1]       [,2]       [,3]       [,4]
#> [1,] 0.57426947 0.59617809 0.05355548 0.05962695
#> [2,] 0.60420788 0.06640785 0.43616808 0.03359352
#> [3,] 0.44216820 0.58033207 0.22686284 0.42624557
#> [4,] 0.08838313 0.27258925 0.71353586 0.76606084

现在,让我们看看仅使用一组括号的第一个元素。

# Extract one element as a list
a <- foo['first'] # Or foo[1]

# Examine output
print(a)
#> $first
#>           [,1]      [,2]       [,3]      [,4]
#> [1,] 0.3517863 0.1222894 0.69358440 0.7850944
#> [2,] 0.7516454 0.9881041 0.72152473 0.3035514
#> [3,] 0.8540138 0.3966431 0.40551019 0.3687717
#> [4,] 0.8872717 0.7438446 0.03258007 0.1305907
class(a)
#> [1] "list"

你会注意到这是一个列表。 让我们尝试使用两组括号。

# Extract one element
b <- foo[['first']] # Or foo[[1]]

# Examine output
print(b)
#>           [,1]      [,2]       [,3]      [,4]
#> [1,] 0.3517863 0.1222894 0.69358440 0.7850944
#> [2,] 0.7516454 0.9881041 0.72152473 0.3035514
#> [3,] 0.8540138 0.3966431 0.40551019 0.3687717
#> [4,] 0.8872717 0.7438446 0.03258007 0.1305907
class(b)
#> [1] "matrix"

reprex 包(v0.3.0) 于 2019 年 6 月 18 日创建

是矩阵! 另外,它保持了矩阵的原始结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM