矢量化分配功能

时间:2017-12-14 03:39:55

标签: r

我有很多矩阵要初始化,我想知道我是否可以在没有循环的情况下完成它

我正在尝试以下但它似乎不起作用。例如

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变量

1 个答案:

答案 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()包裹上述内容,但只需指定对象。

但是,更好的选择是将所有内容保留在listarray中,而是使用这些结构。

例如:

setNames(replicate(length(resmatrix), matrix(NA, 10, 100), FALSE), resmatrix)