如何将警告和错误保存为函数的输出?

2024-01-21

我在用着lapply对大量项目运行复杂的函数,我想将每个项目的输出(如果有)与生成的任何警告/错误一起保存,以便我可以知道哪个项目产生了哪个警告/错误。

我找到了一种使用捕获警告的方法withCallingHandlers (此处描述 https://stackoverflow.com/questions/4947528)。但是,我也需要捕获错误。我可以通过将它包裹在一个tryCatch(如下面的代码所示),但是有更好的方法吗?

catchToList <- function(expr) {
  val <- NULL
  myWarnings <- NULL
  wHandler <- function(w) {
    myWarnings <<- c(myWarnings, w$message)
    invokeRestart("muffleWarning")
  }
  myError <- NULL
  eHandler <- function(e) {
    myError <<- e$message
    NULL
  }
  val <- tryCatch(withCallingHandlers(expr, warning = wHandler), error = eHandler)
  list(value = val, warnings = myWarnings, error=myError)
} 

该函数的示例输出为:

> catchToList({warning("warning 1");warning("warning 2");1})
$value
[1] 1

$warnings
[1] "warning 1" "warning 2"

$error
NULL

> catchToList({warning("my warning");stop("my error")})
$value
NULL

$warnings
[1] "my warning"

$error
[1] "my error"

这里有几个关于 SO 的问题讨论tryCatch和错误处理,但我发现没有一个可以解决这个特定问题。看如何检查函数调用是否会导致警告? https://stackoverflow.com/questions/3903157, warnings() 在函数内不起作用?如何解决这个问题? https://stackoverflow.com/questions/4020239, and 如何告诉 lapply 忽略错误并处理列表中的下一个内容? https://stackoverflow.com/questions/2589275对于最相关的。


也许这与你的解决方案相同,但我写了一个factory将普通的旧函数转换为捕获其值、错误和警告的函数,这样我就可以

test <- function(i)
    switch(i, "1"=stop("oops"), "2"={ warning("hmm"); i }, i)
res <- lapply(1:3, factory(test))

结果的每个元素都包含值、错误和/或警告。这适用于用户函数、系统函数或匿名函数(factory(function(i) ...))。这里是工厂

factory <- function(fun)
    function(...) {
        warn <- err <- NULL
        res <- withCallingHandlers(
            tryCatch(fun(...), error=function(e) {
                err <<- conditionMessage(e)
                NULL
            }), warning=function(w) {
                warn <<- append(warn, conditionMessage(w))
                invokeRestart("muffleWarning")
            })
        list(res, warn=warn, err=err)
    }

以及一些处理结果列表的助手

.has <- function(x, what)
    !sapply(lapply(x, "[[", what), is.null)
hasWarning <- function(x) .has(x, "warn")
hasError <- function(x) .has(x, "err")
isClean <- function(x) !(hasError(x) | hasWarning(x))
value <- function(x) sapply(x, "[[", 1)
cleanv <- function(x) sapply(x[isClean(x)], "[[", 1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将警告和错误保存为函数的输出? 的相关文章

  • R 中 nlme 包中的 gls 函数出错

    我不断收到这样的错误 Error in coef lt corARMA tmp value c 18 3113452983211 1 56626248550284 Coefficient matrix not invertible 或者像这
  • ess-rdired:我收到此错误“现在没有 ESS 进程与此缓冲区关联”

    To use ess rdired为了浏览对象 我按照 ESS 手册并将以下内容添加到我的 emacs autoload ess rdired ess rdired View R objects in a dired like buffer
  • 从每小时中提取/子集分钟值

    我的数据框包含以下格式的日期值YYYY MM DD HH MM SS跨越 125000 多行 按分钟细分 每行代表一分钟 1 2018 01 01 00 04 00 2 2018 01 01 00 05 00 3 2018 01 01 00
  • 如何上下移动字符串并从中删除相似的字符串?

    我问了一个可能不太清楚的问题 所以我尝试用一 种可以理解的方式来解释它 这是我的数据 我的数据看起来像这样 看起来像这样 V1 V2 V3 1 Q9UNZ5 Q9Y2W1 2 Q9ULV4 Q6QEF8 3 Q9UNZ5 4 Q9H6F5
  • 在 R 中安全地计算算术表达式?

    Edit 好吧 由于似乎有很多混乱 我将稍微简化一下问题 您可以尝试回答下面的原始问题 或者您可以解决此版本并忽略该行下面的所有内容 我的目标是采用任意表达式并在极其受限的环境中对其进行评估 该环境将仅包含具有以下类型值的变量 数值向量 接
  • 如何使用 ggplot2 对曲线下的区域进行着色

    我一直在尝试使用 ggplot2 生成类似于此 R 图形的绘图 xv lt seq 0 4 0 01 yv lt dnorm xv 2 0 5 plot xv yv type l polygon c xv xv lt 1 5 1 5 c y
  • 根据 R 中的字符串模式选择行

    假设我有以下数据 df lt data frame name c TO for Turnover for people HC people Hello world beenie man apple pears TO is number c
  • 使用 roxygen2 导入两个同名函数

    我是 CRAN 包的维护者 在加载时收到以下消息 checking whether package qdap can be installed 10s 10s WARNING Found the following significant
  • 更新面板异常处理

    当我在正在构建的 ASP NET Web 应用程序中实现的 UpdatePanel 中发生异常时 它们会导致页面上出现 JavaScript 错误 并在警报中提供一些高级错误输出 这对于开发来说还可以 但是一旦系统投入生产 由于多种原因 这
  • 跨类别和列自动化卡方

    我有一个调查数据框 其中包含几个问题 列 编码为 1 同意 0 不同意 受访者 行 根据 年龄 年轻 中年 老年 地区 东 中 西 等指标进行分类 大约有30个类别总共 3个年龄 3个地区 2个性别 11个职业等 在每个指标中 类别不重叠且
  • 使用faceting()时如何连接geom_point()和geom_line?

    我有一个问题 但我在互联网上没有找到任何相关信息 我很高兴得到一些提示 我有一个数据集 其中 x 轴是离散的 但我想将这些点相互连接 我可以做到 我的问题是当我添加分面选项时 我无法再将这些点相互链接起来 我找到了一个替代方案 但看起来不太
  • 在 R 的替换命令中取消引用字符串

    我想知道是否可以unquote通过替换命令传递给表达式的字符串 具体来说 我使用 dplyr 从数据框中过滤和选择 gt w subject sex response 1 1 M 19 08 2 2 M 16 46 6 6 M 23 60
  • R,igraph,是否可以用图案填充顶点

    使用 R 和 igraph 绘制图形 我使用颜色来标记顶点类型 请参阅下面的代码 是否可以用图案而不是颜色填充顶点 以便在以彩色和黑白查看时可以区分节点类型 我需要 4 种独特的颜色 图案 colorbrewer 中唯一适合的调色板是这个
  • 使用 R SOAP (SSOAP) 检索数据/抓取

    在 B cycle 页面 www bcycle com whowantsitmore aspx 上 我试图抓取投票的位置和值 The URL http mapservices bcycle com bcycleservice asmx ht
  • 如何在R中创建for循环? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 R 编程中启动 for 循环 https stackoverflow com questions 4162363 how to start a for loop in r programmin
  • 使用 R Markdown 文档作为函数源

    我正在研究 R Markdown 来记录我经常使用的功能 我会将它们放入 R Markdown 文件中以记录它们 然后如果我几个月后回来查看它 就能够阅读我在函数背后的想法 我的问题是 如果我开始一个新的 R 项目 是否可以获取 r mar
  • 如何将 Shiny 中生成的反应图传递到 Rmarkdown 以生成动态报告

    简而言之 我希望能够通过单击按钮从我的闪亮应用程序生成动态 Rmarkdown 报告文件 pdf 或 html 为此 我想我将使用 Shiny 的参数化报告 但不知何故 我无法将单个谜题转移到所需的目标 使用此代码 我们可以在 R Shin
  • R中data.frame(列表)的列平均值

    Data https i stack imgur com ZYsmv jpg 请 我需要计算此 data frame 中维吉尼亚币 Sepal Length 列的平均值 Sepal Length Sepal Width Petal Leng
  • 如何在闪亮的observeEvent中监听多个事件表达式

    我想要两个不同的事件触发观察者 有人建议here https stackoverflow com questions 34731975 how to listen for more than one event expression wit
  • SparkR 和 Sparklyr 之间导入 parquet 文件所需的时间差异

    我正在使用 databricks 导入镶木地板文件SparkR and sparklyr data1 SparkR read df dbfs data202007 source parquet header TRUE inferSchema

随机推荐

  • 真正的 CTE 递归?

    我今天下午刚刚发现了 CTE 在享受了 2 个小时之后 我意识到它们并没有像我们在任何其他语言中学到的那样执行常见的递归 我的意思是 我总是将递归视为树搜索 所以我原以为 CTE 会一路下降到它发现的第一片叶子 但没有 他的工作是分层进行的
  • Power Query 列名称作为参数

    亲爱的巫师们 我正在尝试创建一个可以使用输入的搜索功能 1 搜索表 2 该表中将运行搜索的列 3 在2指定的列中搜索的值 该函数如下所示 mTbl as table mColName as text mColValue as text gt
  • 如何在 RDBMS 中表示预定事件?

    我必须存储可以每周 每天或每月组织的预定活动 例如上课时间 例如 事件可以在每周一和周三或每月的第二个周四发生 有没有办法将这些信息存储在遵循 3NF 的 RDBMS 中 编辑 这不是家庭作业 我正在和一个朋友一起构建一些东西来启发我们自己
  • MVC 提交带有部分视图的表单

    抱歉 如果之前已经回答过这个问题 我找不到任何与我的问题相符的内容 我有一个视图 其中包含一个部分视图 并且在提交视图时 部分视图中的数据不会发送到控制器 我知道如果我使用编辑器模板 这应该可以工作 但我无法使用它 因为我需要来自部分内部主
  • 如何从列表中显示 ng-templates

    我有一个AppComponent其中包含一个列表ShapeComponents 我实现了一些扩展的组件ShapeComponent like LineComponent CircleComponent RectangleComponent
  • 序列化时仅使用@JsonIgnore,反序列化时不使用@JsonIgnore

    我有一个与服务器发送和接收的用户对象 当我发送用户对象时 我不想将哈希密码发送给客户端 所以 我添加了 JsonIgnore在密码属性上 但这也阻止了它被反序列化为密码 这使得当用户没有密码时很难注册用户 我怎样才能只得到 JsonIgno
  • urllib2 SSL3_CHECK_CERT_AND_ALGORITHM:dh 密钥太小

    尝试使用发送 SOAP 请求suds 我在用着Python 2 7 6 我不太熟悉安全性 我相信我的机器或服务器机器上的安全密钥太小 我不知道如何解决 我是否生成一些新密钥并创建自定义开启器 任何帮助 指导都会有帮助 堆栈跟踪 Traceb
  • TFS 尽管构建是绿色的,但并非所有测试都运行

    由于某种原因 我们大约四分之一的测试没有在 TFS 上运行 构建最终显示为绿色 但仅报告 3 4 表示所有测试均已通过 我猜问题出在一些经过测试的异步代码中 这些代码可能会导致测试运行程序崩溃或继续自行运行 在 VS 本地 所有测试都顺利通
  • 用 Cpp 或其他快速语言反转大型哈希表

    我正在寻找高效的 C 或其他快速 来反转一个巨大的哈希表 哈希键的数量约为200 000 000个 每个哈希键中可能的元素数量约为 100 000 个 我想知道 有效地 反转此类表的好方法是什么 这样现在元素就是键 键就是元素 现在 我将硬
  • Android - 获取对 SD 卡上任何文件路径具有写访问权限的 DocumentFile(已获得 SD 卡权限)

    在我的应用程序中 我使用以下意图获得 SD 卡写入权限 如果用户从系统文件资源管理器中选择 SD 卡文件夹 则我具有 SD 卡写入权限 Intent intent new Intent Intent ACTION OPEN DOCUMENT
  • 我可以从 Tcl 中的文件句柄中找到文件名吗?

    如同我可以从 Perl 中的文件句柄中找到文件名吗 https stackoverflow com questions 2813092 can i find a filename from a filehandle in perl但在 Tc
  • GAE - 无法更新:com.google.appengine.tools.admin.HttpIoException:

    我尝试上传我的测试 gwt 应用程序 但我刚刚遇到了一个非常奇怪的错误 每次我尝试上传应用程序时 我都会收到以下信息 无法更新应用程序 发布到 URL 时出错 500内部服务器错误 服务器错误 500 发生服务器错误 有关更多详细信息 请参
  • 使用 Python 将图像上传到 Instagram

    我正在尝试做一个简单的 Instagram python 机器人 以便在我的 Instagram 个人资料中上传图像 我已经尝试过最常见的库 InstagramAPI instapy insta cly 当我搜索时 我发现 Instagra
  • powershell:查找具有最长路径的子目录

    我想找到给定目录中子目录中最长的路径 因为我遇到了以下错误 The specified path file name or both are too long The fully qualified file name must be le
  • 是否可以从 vscode 扩展内部对 OAuth 2.0 API 进行身份验证

    我的团队编写了一个监控系统 我们最近将监控的定义迁移到了 git 存储库中 这些定义由一些 json 和 powershell 文件组成 VSCode 是编辑和处理 git 的理想场景 问题是在开发监控时 能够在测试环境中执行它是很好的 以
  • ActiveRecord 中的 PostgreSQL jsonb 字段 own_to 关联

    我可以在belongs to关联中使用jsonb字段作为foreign key吗 大致如下 belongs to product class name Product foreign key data gt product id 只能在列
  • 选择带宽和线性空间进行核密度估计。 (为什么我的带宽不起作用?)

    我已关注这个链接 https stackoverflow com questions 35094454 how would one use kernel density estimation as a 1d clustering metho
  • 如何在 AngularJS 中使用 event.preventDefault() ?

    我遇到了一种避免表单提交后页面刷新的方法 即event preventDefault 作为 Angular 的新手 我真的不知道如何将此语法放入我的 Angular 控制器中 事件 是 Angular 服务吗 如何在代码中使用它 任何帮助
  • 图像处理 Opencv Python 中的角点检测

    我有盒子的图片 我正在尝试检测角点并从圆圈中标记这些角点 我为此使用以下代码 import cv2 import numpy as np img file Image jpg img cv2 imread img file cv2 IMRE
  • 如何将警告和错误保存为函数的输出?

    我在用着lapply对大量项目运行复杂的函数 我想将每个项目的输出 如果有 与生成的任何警告 错误一起保存 以便我可以知道哪个项目产生了哪个警告 错误 我找到了一种使用捕获警告的方法withCallingHandlers 此处描述 http