gpt4 book ai didi

arrays - 如何在R中创建列表矩阵?

转载 作者:行者123 更新时间:2023-12-04 10:07:10 25 4
gpt4 key购买 nike

我想要的是一个 矩阵其中每个元素是一个 列表本身。
请参阅以下示例:

1       2       3
1 1,2,4 1,2 1
2 Null 3,4,5,6 1,3

我看到了 this发布,并尝试以下操作但出现错误:
 b <- array()
b[j, i, ] <- A[i]

其中 A 是向量本身。
错误是:
 Error in b[j, i, ] <- A[i] : incorrect number of subscripts

我应该如何定义和访问矩阵的每个元素以及包含列表的每个元素?

更新 1:
b<-matrix(list(),nrow = length(d), ncol =length(c))

Error in b[j, i] <- A[i] : replacement has length zero

我想指定每个元素是一个列表,然后尝试用从零到 n 不同长度的各种列表填充它。

更新 2:
 running what @BondedDust commented :
b<-matrix(rep(list(),(c*d)),,nrow = length(d), ncol =length(c))
Erorr in b[[j*nrow(b)+i]] <- A[i] : attempt to select less than one element

一个 :
A[1]<-c(3)     F[[1]]<-numeric(0)   E[[1]]<-numeric(0)
A[2]<-c(1) F[2]<-c(1) E[2]<-c(1)
A[3]<-c(1) F[3]<-c(2) E[[3]]<-numeric(0)
A[[4]]<-c(1,3) F[[4]]<-numeric(0) E[[4]]<-numeric(0)
A[5]<-c(4) F[5]<-c(4) E[5]<-c(4)

A:第 1 行,F:第 2 行和 E:第 3 行的值。(5 列)

这个数据不是这种形式的,也没有存储在任何地方,它们是另一个函数的输出(在 A[i] 的地方有函数)。数据只显示什么剂量 A看起来像可重复,因此显示矩阵中的位置并返回 error在更新2。 A[4]是第 4 列第 2 行的元素。

最佳答案

尽管打印方法不会以您想象的方式显示它,但这会构建该矩阵:

 matrix( list(c(1,2,4), c(NULL), c(1,2), c(3,4,5,6), c(1), c(1,3)), 2,3)
#---------
[,1] [,2] [,3]
[1,] Numeric,3 Numeric,2 1
[2,] NULL Numeric,4 Numeric,2

检查第一个元素:
> Mlist <- matrix( list(c(1,2,4), c(NULL), c(1,2), c(3,4,5,6), c(1), c(1,3)), 2,3)
> Mlist[1,1]
[[1]]
[1] 1 2 4

> is.matrix(Mlist)
[1] TRUE
> class( Mlist[1,1] )
[1] "list"

从列表创建“列表矩阵”的演示:
> will.become.a.matrix <- list(c(1,2,4), c(NULL), c(1,2), c(3,4,5,6), c(1), c(1,3))
> is.matrix(will.become.a.matrix)
[1] FALSE
> dim(will.become.a.matrix) <- c(2,3)
> is.matrix(will.become.a.matrix)
[1] TRUE
> dim(will.become.a.matrix)
[1] 2 3
> class(will.become.a.matrix[1,1])
[1] "list"

进一步要求演示:
 A<- list(); F=list() E=list()
A[1]<-c(3) ; F[[1]]<-numeric(0); E[[1]]<-numeric(0)
A[2]<-c(1) ; F[2]<-c(1) ; E[2]<-c(1)
A[3]<-c(1) ; F[3]<-c(2) ; E[[3]]<-numeric(0)
A[[4]]<-list(1,3) ;F[[4]]<-numeric(0) ; E[[4]]<-numeric(0)
A[5]<-c(4) ; F[5]<-c(4) ; E[5]<-c(4)
Mlist= c(A,F,E)
M <- matrix(Mlist, length(A), 3)
#=====================================
> M
[,1] [,2] [,3]
[1,] 3 Numeric,0 Numeric,0
[2,] 1 1 1
[3,] 1 2 Numeric,0
[4,] List,2 Numeric,0 Numeric,0
[5,] 4 4 4

你问(在评论中)“......有没有办法定义列数和行数,而不是元素本身,因为它们是未知的?”

已回答(最初在评论中)
b<-matrix(rep(list(), 6),nrow = 2, ncol =3) 
#.... then replace the NULL items with values.
# Need to use "[[": for assignment (which your 'Update 1' did not
# ....and your Update2 only did for some but not all of the assignments.)

b[[1]] <- c(1,2,3,4)

关于arrays - 如何在R中创建列表矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com