使用循环和功能附加到列表时出现“找不到列表”

时间:2018-07-09 20:34:58

标签: r

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

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个组成部分的列表。

1 个答案:

答案 0 :(得分:2)

如果您修改了传递给函数的变量,则只会在该函数作用域内对其进行修改,而不是它的来源。函数应返回更新的值。这是使用lapply()而不是for循环的一种更类似于R的方法。

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)