目标:在循环的每次迭代上应用一个函数,并获取每次迭代的结果,并将其追加到函数运行后可以使用的列表(全局变量)上。
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个组成部分的列表。
答案 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)