R-将矩阵存储到单个数据帧单元中
我试图将整个矩阵/数组存储到数据帧的单个单元格中,但不太记得如何执行 在你说这件事做不到之前,我肯定我记得有人问了一个关于这件事在哪里做的问题,虽然这不是问题的重点,所以我再也找不到了 例如,可以将矩阵存储在矩阵的单个单元格中,如下所示:R-将矩阵存储到单个数据帧单元中,r,dataframe,R,Dataframe,我试图将整个矩阵/数组存储到数据帧的单个单元格中,但不太记得如何执行 在你说这件事做不到之前,我肯定我记得有人问了一个关于这件事在哪里做的问题,虽然这不是问题的重点,所以我再也找不到了 例如,可以将矩阵存储在矩阵的单个单元格中,如下所示: myMat <- array(list(), dim=c(2, 2)) myMat[[1, 1]] <- 1:5 myMat[[1, 2]] <- 6:10 # [,1] [,2] #[1,] Integer,5
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
我想我快到了。通过最后一次尝试,我可以做
myDF[[1,'m']]
来检索list(1:5)
,从而myDF[[1,'m']][[1]]
来获得1:5
,但我更愿意只做myDF[[1,'m']]]
,然后获得1:5
,我认为技巧可能是将其作为一个列表插入:
set.seed(123)
dat <- data.frame(women, m=I(replicate(nrow(women), matrix(rnorm(4), 2, 2),
simplify=FALSE)))
str(dat)
'data.frame': 15 obs. of 3 variables:
$ height: num 58 59 60 61 62 63 64 65 66 67 ...
$ weight: num 115 117 120 123 126 129 132 135 139 142 ...
$ m :List of 15
..$ : num [1:2, 1:2] -0.5605 -0.2302 1.5587 0.0705
..$ : num [1:2, 1:2] 0.129 1.715 0.461 -1.265
...
..$ : num [1:2, 1:2] -1.549 0.585 0.124 0.216
..- attr(*, "class")= chr "AsIs"
dat[[1, "m"]]
[,1] [,2]
[1,] -0.5604756 1.55870831
[2,] -0.2301775 0.07050839
dat[[2, "m"]]
[,1] [,2]
[1,] 0.1292877 0.4609162
[2,] 1.7150650 -1.2650612
然后,您可以这样分配给它:
dat[[2, "m"]] <- matrix(rnorm(9), 3, 3)
dat[[2,m]]我想我已经解决了。初始化数据框非常重要,这样列就可以接受矩阵
为此,您给它一个列表数据类型。注意I
以保护列表()
使用[[]]
符号访问:
> myDF$m[[1]]
[,1] [,2] [,3]
[1,] 0.3307403 -0.2031316 1.5995385
[2,] 0.4588922 0.1631086 -0.2754463
[3,] 0.0568791 1.0358552 -0.1623794
要使用非零行进行初始化,您可以执行以下操作(注意I
保护向量和向量('list',5)
初始化长度为5的空列表以避免浪费内存):
myDF类似:dat@sebastian-c不,我想要dat[[I,'m']]
中的矩阵,每个I
作为一行,而不是dat[[m']]
作为矩阵。虽然这是可能的,我建议不要这样做——很多内部数据帧代码都假设列是原子向量,并且在输入列表时中断。每次我把一个列表放在一个数据框里,我都会后悔。但是我如何在每个单元格的基础上赋值,因为这要求我在创建时知道每个值,并赋值dat[[1,'m']dat[[I,“m”]],但是如果我创建dat作为dat是的,那么我就可以算出它。使用list()
作为每个单元格的数据类型初始化数据框,然后分配工作,这一点很重要。最好也将其初始化为0行,因为我事先不知道该列的矩阵。@mathematic.coffee我正要建议data.frame(I=1:5,m=I(vector(mode=“list”,length=5));dat[[2,“m”]]
dat[[2, "m"]] <- matrix(rnorm(9), 3, 3)
myDF <- data.frame(i=integer(), m=I(list()))
myDF[1, 'i'] <- 1
myDF[[1, 'm']] <- matrix(rnorm(9), 3, 3)
> myDF$m[[1]]
[,1] [,2] [,3]
[1,] 0.3307403 -0.2031316 1.5995385
[2,] 0.4588922 0.1631086 -0.2754463
[3,] 0.0568791 1.0358552 -0.1623794
myDF <- data.frame(i=1:5, m=I(vector('list', 5)))
myDF$m[[1]] <- matrix(rnorm(9), 3, 3)