如何修改矩阵的某一行,必须通过 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
循环或使用 assign
和 get
和 eval(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)
在第一个大循环中我生成了 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
循环或使用 assign
和 get
和 eval(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)