3

我在 R 中有一个列表列表。我想将其转换为列表数组,但我只得到一个列表列表数组:

r <- list(list(a=1, b=NULL, c=NULL, d=1.23),
          list(a=2, b=NULL, c=NULL, d=3.32),
          list(a=3, b=NULL, c=NULL, d=2.13),
          list(a=4, b=NULL, c=NULL, d=3.25),
          list(a=5, b=NULL, c=NULL, d=0.14),
          list(a=6, b=NULL, c=NULL, d=5.13))
x <- array(r, dim=c(3,2))
x[1,1] # now a list of length 1 containing an element which is a list with components a--d

如您所见,x[1,1](例如)现在是一个列表列表,但“外部”列表是无用的。我宁愿有一个y数组y[i,j]being x[i,j][[1]]。得到这个的最好方法是什么(使用 base-R 中的函数(没有额外的包))?

我尝试使用一些unlist()hackery like array(unlist(r, recursive=FALSE), dim=c(3,2)),但失败了。sapply(r, FUN=I)至少给出一个矩阵......也许这有帮助(?)

4

2 回答 2

5

使用双括号,x[[1,1]].

于 2012-12-30T15:30:18.717 回答
1

按照设计,你不能这样做。

根据定义,向量元素是长度为 1 的向量,而数组/矩阵仍然是具有维度的向量。

列表本身就是通用向量,因此它们可以是其他列表(或数组或矩阵)的元素,但前提是它们本身的长度为 1。

顺便说一句,这就是为什么使用 [ ] 选择列表中包含的对象仅返回包含该对象的大小为 1 的列表,而不是您需要使用 [[ ]] 获取的实际对象的原因。

所以答案是,真的没有办法摆脱“外部”列表。

有关详细信息,请参阅R 语言定义手册。

于 2012-12-30T15:17:14.500 回答