8

(我在这个问题中明确使用了错误的术语,对此感到抱歉 - 我只是不知道用 R 术语描述这个问题的正确方法......)

我想创建一个异构对象的结构。尺寸不一定是矩形。在其他语言(如 C)中,我需要的可能只是“对象数组”。“对象”是指由不同成员组成的结构,即 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

4 回答 4

13

您是在寻找这只神兽的名字还是只是在寻找它?:) 我可能是错的,但我认为您只需将其称为列表列表.. 例如:

# 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 ]]
于 2013-02-23T23:16:33.627 回答
6

我没有意识到您正在寻找创建相同结构的其他对象。您正在寻找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"
于 2013-02-24T09:21:13.380 回答
2

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

    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]])  
于 2013-02-24T00:46:12.930 回答
1

如果尺寸始终是矩形(在您的情况下为 100x50),并且内容始终是同质的(在您的情况下为数字),则创建一个 2D array/matrix

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

于 2017-03-27T22:37:19.367 回答