r - 如何在循环中处理 R 警告?
问题描述
我有一个用例,我需要一些基于某些代码生成的警告数量的控制流:
# clear all warnings
assign("last.warning", NULL, envir = baseenv())
for (i in 0:100) {
# call warning-generating code here
x <- warnings()
cat(paste('There were',length(x),'warnings generated\n'))
if (length(x)>10) {
# do something
}
# clear all warnings again
assign("last.warning", NULL, envir = baseenv())
}
由于某种原因,此代码不起作用。代码总是会给出There were 0 warnings generated
......为什么?如果我在循环外运行有问题的警告生成代码,它会产生非零可变数量的警告......
解决方案
不确定这是否是您的目标?
# clear all warnings
assign("last.warning", NULL, envir = baseenv())
x <- rep(NA, 100)
for (i in 1:100) {
# call warning-generating code here
x[i] <- warning()
cat(paste('There were',sum(!is.na(x)),'warnings generated\n'))
if (sum(!is.na(x))>10) {
# do something
}
# clear all warnings again
assign("last.warning", NULL, envir = baseenv()
}
看起来像是一个错字——afaik warnings() 只会向你显示警告——在循环中的这一品脱处仍然是 NULL;警告()将产生。
推荐阅读
- vue.js - 应该使用 Vuex 存储哪一部分数据?
- android-studio - Android CollapsingToolbarLayout 渲染问题
- android - react-native-geocoding 中的地理编码问题
- c# - 有没有办法在 C# 中获得独立于 AMD、NVIDIA 或 Intel GPU 的实时 GPU 性能信息?
- javascript - 如何使用 React JS 通过 Websocket api 增加计数
- hibernate - 如何在 WHERE IN 子句中使用复合键
- rdfs - 我所有的标签都去哪儿了?Topbraid 猫头鹰到 SHACL 转换
- jdbc - Kafka 连接 SourceTask 的 commit() 和 commitRecord() 方法
- laravel - Laravel 无法在 SMTP 上进行身份验证
- fastreport - 试图消除在 fastreports 上通过电子邮件发送第 2 页