从列表转换为矩阵不会改变 typeof 函数的结果

问题描述 投票:0回答:1

这是一个例子:

t <- list(a=1,b=2,c=3)
typeof(as.matrix(t))

如果你在 R 中运行它(我使用的是 ubunutu R 版本 4.3.1),typeof 仍然是列表。如果你创建一个像matrix(c(1,2,3), ncol=3)这样的矩阵,typeof将返回matrix。 对于另一个函数,我要求类型是矩阵,否则会抛出错误。

我不确定这是一个错误还是一个预期的功能,但我希望有人可以解释发生了什么。 我知道我可以通过调用unlist()和matrix()来解决这个问题,但我有兴趣知道为什么会发生这种情况,以及是否有一些更简单的方法来解决这个问题

r list matrix typeof
1个回答
0
投票

as 已在commens 中讨论过,as.matrix 在这两种情况下都使用 as.matrix.default 方法。

我们可以进一步追查差异,但也许足以认识到 base::array 函数对待命名列表输入与命名向量输入的方式不同。

> str(array(list(a=1,b=2)))
List of 2
 $ : num 1
 $ : num 2
 - attr(*, "dim")= int 2

> str(array(c(a=1,b=2)))
 num [1:2(1d)] 1 2

as.matrix is a wrapper around the underlying array() call
© www.soinside.com 2019 - 2024. All rights reserved.