功能环境中的矩阵列表

时间:2018-04-10 06:27:20

标签: r function global-variables assign

我有一个涉及创建矩阵列表的函数。我使用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错误

2 个答案:

答案 0 :(得分:1)

这件事对你有用吗?

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声明为全局环境中的空列表。然后将每个元素推入其中。请注意{you}想要从fun-envir添加到global-envir中的<<-

答案 1 :(得分:1)

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

尝试一下

的内容
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