函数环境中的矩阵列表

List of matrices in function environment

我有一个涉及创建矩阵列表的函数。我使用 assign() 来命名该列表中的矩阵。这在全球环境中运作良好。但是,如果我在函数环境中使用此技术,则会收到 object not found 错误。我有一个解决方法是使用 envir = .GlobalEnv 作为 assign() 中的参数,但是,我认为这不是最好的解决方案(我不想用这些变量填充我的全局环境) .有没有更好的办法?这是一个示例代码:

my_function <- function(x){
my_list <- c()
for (i in 1:length(x)){
  assign(paste("matrix", i, sep="_"), matrix(data = NA, nrow = 5, ncol = 4), envir = .GlobalEnv)
}
my_list <- lapply(paste("matrix", 1:length(x), sep="_"), get)
}

同样,如果我去掉上面的 envir = .GlobalEnv 参数,我会得到一个 object not found 错误

这对你有用吗?

my_list     <- list()
my_function <- function(x){
    for (i in 1:length(x)){
        my_list[[paste("matrix", i, sep="_")]] <<- matrix(data = NA, nrow = 5, ncol = 4)
    }
}

调用函数:

my_function(1:3)

旁注:

所以想法是在全局环境中将 my_list 声明为一个空列表。然后将每个元素推入其中。请注意要从 fun-envir 添加到 global-envir 中的 <<-

这确实不是设计解决方案的好方法。您应该将矩阵附加到列表中。

按照

的方式尝试一些东西
my_function <- function(x) {
    mylist <- vector("list", length(x))

    for (i in 1:length(x)) {
        mylist[[i]] <- matrix(data = NA, nrow = 5, ncol = 4)
    }

    return(mylist)
}

> my_function(1:3)
[[1]]
     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA
[5,]   NA   NA   NA   NA

[[2]]
     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA
[5,]   NA   NA   NA   NA

[[3]]
     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA
[5,]   NA   NA   NA   NA