如何解决如何在R中创建多个空矩阵?
我想创建名为18
,mat10ci
,....,mat15ci
的相同维度的mat95ci
空矩阵。我尝试了以下代码
for( s in seq(10,95,by=5)){
paste0("mat",s,"ci")=array(NA,dim = c(10,20))
}
我遇到此错误
target of assignment expands to non-language object
感谢您的帮助。
解决方法
我推断您将对每个矩阵进行相同(或非常相似)的操作,在这种情况下,R惯用的处理方式是将它们保持在矩阵列表中。这与“帧列表”相同,请参见https://stackoverflow.com/a/24376207/3358272。
有关矩阵列表,请尝试:
lst_of_mtx <- replicate(18,array(dim = c(10,20)),simplify = FALSE)
或者,根据您的处理,您可以做一个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
# [,mat20ci
# [,mat25ci
# [,] NA NA NA
您只能在其中处理数组的一个“切片”
ary[,"mat25ci"]
# [,] NA NA NA
,
也许您可以尝试list2env
+ replicate
list2env(
setNames(
replicate(18,array(NA,dim = c(10,simplify = FALSE),seq(10,95,by = 5),"ci")
),envir = .GlobalEnv
)
键入ls()
时,您会看到
> ls()
[1] "mat10ci" "mat15ci" "mat20ci" "mat25ci" "mat30ci" "mat35ci" "mat40ci"
[8] "mat45ci" "mat50ci" "mat55ci" "mat60ci" "mat65ci" "mat70ci" "mat75ci"
[15] "mat80ci" "mat85ci" "mat90ci" "mat95ci"
,
尝试assign
:
for( s in seq(10,by=5)){
assign (paste0("mat",s,"ci"),20)))
}
,
我们也可以做到
lst1 <- vector('list',18)
names(lst1) <- paste0("mat","ci")
for(nm in names(lst1)) {
lst1[[nm]] <- array(dim c(10,20))
}
list2env(lst1,.GlobalEnv)
或使用tidyverse
和rerun
的选项
library(dplyr)
library(purrr)
library(stringr)
18 %>%
rerun(array(dim = c(10,20))) %>%
set_names(str_c("mat","ci")) %>%
list2env(.GlobalEnv)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。