如何修改矩阵的某一行,必须通过 paste() 调用

How to modify a certain row of a matrix, which has to be called by paste()

在第一个大循环中我生成了 1,000,000 个矩阵 XY_1_1, ..., XY_1000_1000:

for (i in 1:1000){
   for (j in 1:1000){
        assign(paste0("XY",i,j ,sep='_'), matrix(ncol=10, nrow=4))
   }
}

现在我想将一个函数(长度为 10 的向量)的不同结果分配给矩阵的第 r 行,它应该是这样的:

for (r in 1:4){
  for (i in 1000){
    for (j in 1:1000){
       assign(paste0("XY",i,j ,sep='_')[r,], function(i,j,r))
    }
  }
}

不幸的是,我收到错误 'incorrect number of dimensions'。 此外,我尝试使用 get()-Function:

for (r in 1:4){
  for (i in 1000){
    for (j in 1:1000){
       get(paste0("XY",i,j ,sep='_'))[r,] <-  function(i,j,r)
    }
  }
}

导致错误 'target of assignment expands to non-language object'。有谁知道正确的解决方案?如果您需要更多信息,请告诉我。

考虑使用 lapply 将所有对象保存到一个列表中,尤其是因为它们是相同的结构。使用这种方法,您可以避免数以百万计的矩阵淹没您的全球环境成为管理难题!另外,您可以轻松 运行 对所有矩阵元素执行与第 r 行相同的操作。此外,避免嵌套 for 循环或使用 assigngeteval(parse(paste...)))。然后您仍然可以使用 list2env:

从列表中获取那百万个对象
# LIST OF A MILLION MATRICES (SAME DIMS) 
matlist <- lapply(seq(1000000), function(i) matrix(ncol=10, nrow=4))

# NAMING LIST ITEMS
itemnames <- paste0("XY", c(outer(seq(1000), seq(1000), paste0)))
matlist <- setNames(matlist, itemnames)

# UPDATING MATRIX
matlist <- setNames(lapply(seq(length(matlist)), function(i){        
    mat <- matlist[[i]]
    for (r in seq(4)) {
        mat[r,] <- some_function(i,r)
    }  
    return(mat)
}), itemnames)

# OUTPUT INDIVIDUAL ELEMENTS TO SEPARATE GLOBAL OBJECTS
list2env(matlist, envir=.GlobalEnv)