首页 > 解决方案 > 使用循环和函数附加到列表时出现“未找到列表”

问题描述

目标:在循环的每次迭代中应用一个函数,并获取每次迭代的结果并附加到一个列表(全局变量)中,我可以在函数运行后使用该列表。

myBigList <- list()
doStuffList <- function(i, the_list) {
    a <- runif(10)
    b <- rnorm(16)
    c <- rbinom(8, 5, i/10)
    name <- paste('item:',i,sep='')
    tmp <- list(uniform=a, normal=b, binomial=c)
    the_list[[i]] <- tmp
}

for(i in 1:5) {
  doStuffList(i, myBigList)
}

此代码运行,但运行后变量 MyBigList 为空。我尝试更改the_list[[i]] <- tmp为,the_list[[i]] <<- tmp但这给了我一个错误:

"Error in the_list[[i]] <<- tmp : object 'the_list' not found"

如何将全局变量列表传递给函数并在每次迭代期间添加到它?结果将是一个包含 5 个组件的列表。

标签: r

解决方案


如果您修改传递给函数的变量,它只会在该函数范围内被修改,而不是它来自哪里。函数应该返回更新的值。lapply()这是一种更类似于 R 的方式,在这里使用而不是for循环来做同样的事情。

doStuffList <- function(i) {
    a <- runif(10)
    b <- rnorm(16)
    c <- rbinom(8, 5, i/10)
    name <- paste('item:',i,sep='')
    tmp <- list(uniform=a, normal=b, binomial=c)
    tmp
}
myBigList <- lapply(1:5, doStuffList)

推荐阅读