首页 > 解决方案 > 为什么 R 在以下示例中将列表视为矩阵?

问题描述

为什么此代码返回 class == 'matrix'?

l = lapply(1:25, function(x)x)
attr(l,"dim") = c(5,5)
class(l)

然后以下代码崩溃:

image(l)

标签: r

解决方案


根据?attr

attr(x, which) <- 值

which - 一个非空字符串,指定要访问的属性。

所以我们需要

attr(l, 'dim') <- c(5, 5)

其他选项包括

m1 <- matrix(l, 5, 5)

或分配给dim

dim(l) <- c(5, 5)

class(m1)
#[1] "matrix"
str(m1)
#List of 25
# $ : int 1
# $ : int 2
# $ : int 3
# $ : int 4
# ...

identical(m1, l)
#[1] TRUE

关于matrixwithlist元素,l是一个list向量 with length。为了提取元素,我们需要[[. 在这里,我们直接将一个dim属性添加到 'l' 以将其强制转换为matrix1的matrix每个元素。matrix具有将其与 . 分开的行/列list属性。通过分配它,我们正在更改with属性以使其成为lengthmatrixvectorlistrow/columnmatrix

实际上,list结构不会因添加dimENSION而丢失。如果我们需要将 a 更改为lista vector,然后执行or调用unlistvectordimmatrix

matrix(unlist(l), 5, 5)




 

推荐阅读