(我在这个问题上明确地使用了错误的术语,对不起 - 我只是不知道用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)}
我会很感激任何关于这件事描述的暗示。
提前致谢!
答案 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 数组/矩阵
如果您希望能够在单个列表上添加/删除/插入(或更改数据类型),请使用列表列表。