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 个组件的列表。
解决方案
如果您修改传递给函数的变量,它只会在该函数范围内被修改,而不是它来自哪里。函数应该返回更新的值。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)
推荐阅读
- r - 使用 !is.na() 过滤数据。替代 !is na?
- c++ - CMake:在其他目录中找不到我的头文件
- java - Thymeleaf,如何用一串文本做一个新段落
- node.js - 是否有服务或 API 选项可以用 Chrome 开发控制台这样的设备框架包装 Puppeteer 屏幕截图?
- swift - 如果日期相同,则按时间戳过滤数组
- javascript - 如何从字符串数组构造 gulp.parallel()?
- linux-kernel - PXE 引导失败并出现内核崩溃:无法挂载 root fs
- python - 使用 groupby 爆炸列的 Pandas 非常慢
- wordpress - 使用 WP All Import 运行导入后,非导入字段上的 ACF 字段引用消失
- firebase - 是否有正确的方法将相同的数据文档添加到 Firestore 中的两个不同集合中?