Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-将矩阵存储到单个数据帧单元中_R_Dataframe - Fatal编程技术网

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)