【问题标题】:List of matrices in function environment函数环境中的矩阵列表
【发布时间】:2018-04-10 06:27:20
【问题描述】:

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

【问题讨论】:

    标签: r function global-variables assign


    【解决方案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
    

    【讨论】:

    • 此解决方案会导致以下警告消息:number of items to replace is not a multiple of replacement length
    • @VictorMaxwell 立即查看。我已经编辑了列表的子集化方式。
    • 是的,这行得通。我已将此标记为答案。谢谢
    【解决方案2】:

    这对你有用吗?

    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 声明为一个空列表。然后将每个元素推入其中。请注意&lt;&lt;-,因为您想从 fun-envir 添加到 global-envir。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      相关资源
      最近更新 更多