R语言 从列表到矩阵的转换不会改变typeof函数的结果

smdnsysy  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(111)

下面是一个示例:

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

如果你在R中运行这个(我使用的是ubunutu R版本4.3.1),typeof仍然是list。如果你创建一个像matrix(c(1,2,3),ncol=3)这样的矩阵,typeof将返回matrix。对于另一个函数,我要求类型是一个矩阵,否则它会抛出错误。
我不确定这是一个bug还是一个预期的功能,但我希望有人能解释一下发生了什么。我知道我可以通过调用unlist()和matrix()来解决这个问题,但我很想知道为什么会发生这种情况,是否有更简单的方法来解决这个问题

7y4bm7vi

7y4bm7vi1#

正如在comens中所讨论的,在这两种情况下,as.matrix都使用as.matrix.default方法。
我们可以进一步追踪差异,但也许足以认识到base::array函数将命名列表输入与命名向量输入区别对待。

  1. > str(array(list(a=1,b=2)))
  2. List of 2
  3. $ : num 1
  4. $ : num 2
  5. - attr(*, "dim")= int 2
  6. > str(array(c(a=1,b=2)))
  7. num [1:2(1d)] 1 2
  8. as.matrix is a wrapper around the underlying array() call

相关问题