【发布时间】:2012-11-22 01:42:21
【问题描述】:
我正在尝试将整个矩阵/数组存储到数据框的一个单个单元格中,但不太记得该怎么做。
现在在你说它不能完成之前,我确定我记得有人问过一个关于 SO 是在哪里完成的问题,尽管这不是问题的重点,所以我找不到了。
例如,您可以将矩阵存储在矩阵的单个单元格中,如下所示:
myMat <- array(list(), dim=c(2, 2))
myMat[[1, 1]] <- 1:5
myMat[[1, 2]] <- 6:10
# [,1] [,2]
#[1,] Integer,5 Integer,5
#[2,] NULL NULL
诀窍在于使用双括号[[]]。
现在我只是不知道如何为数据框做这件事(或者如果可以的话):
# attempt to make a dataframe like above (except if I use list() it gets
# interpreted to mean the `m` column doesn't exist)
myDF <- data.frame(i=1:5, m=NA)
myDF[[1, 'm']] <- 1:5
# Error in `[[<-.data.frame`(`*tmp*`, 1, "m", value = 1:5) :
# more elements supplied than there are to replace
# this seems to work but I have to do myDF$m[[1]][[1]] to get the 1:5,
# whereas I just want to do myDF$m[[1]].
myDF[[1, 'm']] <- list(1:5)
我想我快到了。通过最后一次尝试,我可以使用myDF[[1, 'm']] 来检索list(1:5),从而通过myDF[[1, 'm']][[1]] 来获取1:5,但我更愿意只使用myDF[[1, 'm']] 并获取1:5。
【问题讨论】:
-
类似:
dat<-data.frame(cars, m=I(matrix(rnorm(10*nrow(cars)), nrow(cars)))); dat[["m"]]? -
@sebastian-c 不,我希望
dat[[i, 'm']]中的矩阵为每个i为一行,而不是dat[['m']]为矩阵。 -
虽然有可能,但我建议不要这样做 - 许多内部数据框代码假定列是原子向量,并在您输入列表时中断。每次我将列表放入数据框时,我都会后悔。