如何在R中创建多个空矩阵?

Udd*_*din 2 null for-loop r matrix

我想创建18名为mat10ci, mat15ci,....,的相同维度的空矩阵mat95ci。我试过下面的代码

for( s in seq(10,95,by=5)){
  paste0("mat",s,"ci")=array(NA, dim = c(10, 20))
}
Run Code Online (Sandbox Code Playgroud)

我有这个错误

target of assignment expands to non-language object
Run Code Online (Sandbox Code Playgroud)

帮助表示赞赏。

r2e*_*ans 5

我推断您将对每个矩阵执行相同(或非常相似)的操作,在这种情况下,处理此问题的 R 惯用方法是将它们放在一个矩阵列表中。这与“帧列表”的方法相同,请参阅/sf/answers/1706334521/

对于矩阵列表,请尝试:

lst_of_mtx <- replicate(18, array(dim = c(10, 20)), simplify = FALSE)
Run Code Online (Sandbox Code Playgroud)

作为替代方案,根据您的处理,您可以执行单个 3d 数组

ary <- array(dim=2:4, dimnames=list(NULL,NULL,paste0("mat", c(10, 15, 20, 25), "ci")))
ary
# , , mat10ci
#      [,1] [,2] [,3]
# [1,]   NA   NA   NA
# [2,]   NA   NA   NA
# , , mat15ci
#      [,1] [,2] [,3]
# [1,]   NA   NA   NA
# [2,]   NA   NA   NA
# , , mat20ci
#      [,1] [,2] [,3]
# [1,]   NA   NA   NA
# [2,]   NA   NA   NA
# , , mat25ci
#      [,1] [,2] [,3]
# [1,]   NA   NA   NA
# [2,]   NA   NA   NA
Run Code Online (Sandbox Code Playgroud)

在那里你可以只处理数组的一个“切片”

ary[,,"mat25ci"]
#      [,1] [,2] [,3]
# [1,]   NA   NA   NA
# [2,]   NA   NA   NA
Run Code Online (Sandbox Code Playgroud)