多维列表?清单清单?列表数组?

时间:2013-02-23 23:09:34

标签: arrays r list matrix nested-lists

(我在这个问题上明确地使用了错误的术语,对不起 - 我只是不知道用R术语描述这个的正确方法......)

我想创建一个异构对象的结构。尺寸不是必需的矩形。我需要的可能只是在其他语言中称为“对象数组”,如“对象”。我指的是由不同成员组成的结构,即R中的列表 - 例如:

myObject <- list(title="Uninitialized title", xValues=rep(NA,50), yValues=rep(NA,50)) 

现在我想制作100个这样的对象,并且能够通过

之类的东西来解决他们的成员问题
for (i in 1:100) {myObject[i]["xValues"]<-rnorm(50)}

for (i in 1:100) {myObject[i]$xValues<-rnorm(50)}

我会很感激任何关于这件事描述的暗示。

提前致谢!

4 个答案:

答案 0 :(得分:12)

你正在寻找这个神话般的野兽的名字,或者只是如何做到这一点? :)我可能是错的,但我认为你只是把它称为列表列表..例如:

# create one list object
x <- list( a = 1:3 , b = c( T , F ) , d = mtcars )

# create a second list object
y <- list( a = c( 'hi', 'hello' ) , b = c( T , F ) , d = matrix( 1:4 , 2 , 2 ) )

# store both in a third object
z <- list( x , y )

# access x
z[[ 1 ]] 

# access y
z[[ 2 ]]

# access x's 2nd object
z[[ 1 ]][[ 2 ]]

答案 1 :(得分:5)

我没有意识到你正在寻找创建相同结构的其他对象。您正在寻找replicate

my_fun <- function() {
    list(x=rnorm(1), y=rnorm(1), z="bla")
}
replicate(2, my_fun(), simplify=FALSE)

# [[1]]
# [[1]]$x
# [1] 0.3561663
# 
# [[1]]$y
# [1] 0.4795171
# 
# [[1]]$z
# [1] "bla"
# 
# 
# [[2]]
# [[2]]$x
# [1] 0.3385942
# 
# [[2]]$y
# [1] -2.465932
# 
# [[2]]$z
# [1] "bla"

答案 2 :(得分:1)

这是我目前的解决方案示例,也许它对某些人有用:

    NUM <- 1000 # NUM is how many objects I want to have
    xVal <- vector(NUM, mode="list")
    yVal <- vector(NUM, mode="list")
    title   <- vector(NUM, mode="list")
    for (i in 1:NUM) {
     xVal[i]<-list(rnorm(50))
     yVal[i]<-list(rnorm(50))
     title[i]<-list(paste0("This is title for instance #", i))
    }
   myObject <- list(xValues=xVal, yValues=yVal, titles=title)
   # now I can address any member, as needed:
   print(myObject$titles[[3]])
   print(myObject$xValues[[4]])  

答案 3 :(得分:1)

如果尺寸始终为矩形(在您的情况下为100x50),并且内容始终是均匀的(在您的情况下为数字),则创建2D 数组/矩阵

如果您希望能够在单个列表上添加/删除/插入(或更改数据类型),请使用列表列表