我有很多矩阵要初始化,我想知道我是否可以在没有循环的情况下完成它
我正在尝试以下但它似乎不起作用。例如
resmatrix =c('amatrix','bmatrix','cmatrix')
我试过
Vectorize(assign,'x')(x=resmatrix,value=matrix(NA,nrow=10,ncol=100))
sapply(resmatrix,FUN=function(x){assign(x,matrix(NA,nrow=10,ncol=100))})
两者都运行但我没有得到amatrix / bmatrix / cmatrix变量
答案 0 :(得分:1)
虽然这是重复的,但您的问题还有一个值得一提的概念:assign
需要知道您要在哪里创建对象。
因此,假设您希望在全局环境中获得结果,则可以通过以下方式重写任一方法:
Vectorize(assign, "x", SIMPLIFY = FALSE)(resmatrix, matrix(NA, 10, 10), envir = .GlobalEnv)
和
sapply(resmatrix, assign, matrix(NA, 10, 100), envir = .GlobalEnv)
如果您不需要查看输出,请使用invisible()
包裹上述内容,但只需指定对象。
但是,更好的选择是将所有内容保留在list
或array
中,而是使用这些结构。
例如:
setNames(replicate(length(resmatrix), matrix(NA, 10, 100), FALSE), resmatrix)