什么';创建一堆具有连续名称的R对象的最短方法是什么?

什么';创建一堆具有连续名称的R对象的最短方法是什么?,r,performance,R,Performance,这就是我目前得到的: weights0 <- array(dim=c(nrow(ind),nrow(all.msim))) weights1 <- array(dim=c(nrow(ind),nrow(all.msim))) weights2 <- array(dim=c(nrow(ind),nrow(all.msim))) weights3 <- array(dim=c(nrow(ind),nrow(all.msim))) weights4 <- array(d

这就是我目前得到的:

weights0 <- array(dim=c(nrow(ind),nrow(all.msim))) 
weights1 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights2 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights3 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights4 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights5 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights0 <- 1 # sets initial weights to 1

weights0我只是试着去实现这一点,但毫无乐趣,也许有人比我更好(很可能是!!)。然而,我忍不住觉得,也许将所有数组放在一个对象(一个列表)中更容易;这样,一条搭接线就可以了,而不是指
权重1
权重2
权重3
权重4
它将是
权重[[1]]
权重[[2]]
权重[[3]
权重[[4]
。这些阵列上的未来操作也将由apply系列函数实现。很抱歉,我无法完全按照您所描述的方式获取它。

鉴于您所做的工作,只需使用
for
循环即可快速直观

# create a character vector containing all the variable names you want..
variable.names <- paste0( 'weights' , 0:5 )

# look at it.
variable.names

# create the value to provide _each_ of those variable names
variable.value <- array( dim=c( nrow(ind) , nrow(all.msim) ) )

# assign them all
for ( i in variable.names ) assign( i , variable.value )

# look at what's now in memory
ls()

# look at any of them
weights4
#创建一个包含所有所需变量名的字符向量。。
变量名选项1
如果要在环境中创建不同的元素,可以使用
for
循环和分配来完成。其他选项包括
sapply
assign的
envir
参数

for (i in 0:5)
    assign(paste0("weights", i), array(dim=c(nrow(ind),nrow(all.msim))))

选择2 然而,正如@Axolotl9250所指出的,根据您的应用程序的不同,将这些都放在一个列表中通常是有意义的

weights <-  lapply(rep(NA, 6), array, dim=c(nrow(ind),nrow(all.msim)))
注意空的
[]
,这对于分配给
权重[[1]]的所有元素非常重要。


选择3 根据@flodel的建议,如果您的所有数组都具有相同的dim, 您可以创建一个大数组,其额外dim的长度等于该数字 你拥有的物品的数量。(即,第6条)


dublicate:明白你的意思了,但我认为我的问题更一般。也许我从一开始就从错误的角度创建了多个对象。可以在单个对象中组合所有权重。。。您是否建议尝试此操作?目前您正在将值
1
重新赋值为权重0,它不再是一个数组,而是一个长度为1的原子向量。如果所有(2D)数组的维数相同,您可以只创建一个3D数组。@mnel的评论是正确的。您需要使用
weights0[]是的,这看起来是创建连续命名权重-v的最佳方法。有用。我想我现在应该把所有这些对象组合成1,以最大限度地简化,正如Flodel所建议的那样,您的编辑是v。有用。将其作为列表而不是数组的任何原因。我正在努力使用weights@RobinLovelace,将其作为列表允许使用不同大小和类别的数组。如果它们都是相同的,那么使用flodel的建议是最佳的。没错,我发现列表对于每个元素中可以放入的内容更宽容一些。我对不同大小的矩阵进行了广泛的研究,现在我已经说到了一点,我总是不得不停下来思考有没有比列表更好的方法,因为出于这个原因,列表已经成为我自动存储的选择。
weights[[1]][ ] <- 1  
weights <- array(dim=c(nrow(ind),nrow(all.msim), 6))
weights[,,1][] <- 1