4

我试图将一个非常简单的 1x4 tibble 转换为数组:

library(tidyverse)
temp <- tibble(x=0,y=1,z=1,w=1)
array(temp)

它给了我以下错误消息:

mapply(FUN = f, ..., SIMPLIFY = FALSE) 中的错误:零长度输入不能与非零长度的输入混合另外:警告消息:1:在 is.na(x) 中:is.na () 应用于“NULL”类型的非(列表或向量)2:在 is.na(x) 中:is.na() 应用于“NULL”类型的非(列表或向量)

在数组函数中,问题似乎是dim(data) <- dim部分原因......我确实想出了一个解决方案,即将小标题变成数据框:

array(as.data.frame(temp))

但我不太确定为什么我必须通过额外的步骤。有人可以告诉我我错过了什么吗?

4

1 回答 1

4

tibble1.4.2 版开始,此行为无法再重现。为了以后的参考,我留下以下记录:

> library(tidyverse)
> versions::installed.versions("tibble")
[1] "1.4.2"
> temp <- tibble(x=0,y=1,z=1,w=1)

> array(temp)
# A tibble: 1 x 4
  <dbl> <dbl> <dbl> <dbl>
1    0.    1.    1.    1.
> array(as.data.frame(temp))
1 0 1 1 1
> simplify2array(temp)
x y z w 
0 1 1 1

> dim(array(temp))
[1] 1 4
> dim(as.data.frame(array(temp)))
[1] 1 4
> dim(simplify2array(temp))
NULL

> class(array(temp))
[1] "tbl_df"     "tbl"        "data.frame"
> class(as.data.frame(array(temp)))
[1] "data.frame"
> class(simplify2array(temp))
[1] "numeric"

> as.array(temp)
Error in `dimnames<-.data.frame`(`*tmp*`, value = list(n)) : 
  invalid 'dimnames' given for data frame

我可以simplify2array用来创建如下所示的 3D 数组,但不幸的是,当我问这个问题时,我不太记得我要做什么。

simplify2array(by(temp, temp$x, as.matrix))
于 2018-05-04T05:36:33.770 回答