gpt4 book ai didi

r - stop() 中忽略的附加参数

转载 作者:行者123 更新时间:2023-12-01 12:34:49 25 4
gpt4 key购买 nike

我想更改 call. 参数的默认值 stop() 当在我的包中调用表单时。因此,这些包包含一个(非导出的)stop 版本,它使用另一个默认值:

stop <- function(..., call. = FALSE, domain = NULL){
base::stop(..., call. = call., domain = domain);
}

这是我为 stop("my error") 准备的。但是,当使用条件对象调用 stop 时,它会发出额外的警告:

> stop(simpleError("foo"))
Error: foo
In addition: Warning message:
In base::stop(..., call. = call., domain = domain) :
additional arguments ignored in stop()

错误是由 r-base 在 stop.R 中引发的.除了 call. 参数的不同默认值外,我如何编写一个行为与 base::stop 完全相同的 stop 函数?

最佳答案

base::stop如果你用一个条件调用它(例如从 tryCatch 捕获错误)作为它的参数 and supply call.,它总是会发出警告或 domain .

这是因为 checkin base::stop

if (length(args) == 1L && inherits(args[[1L]], "condition")) {
....
if (nargs() > 1L) # give the warning

哪里args是你的 ... .

对于 call.参数,stop从错误对象本身而不是从 call. 中获取它stop 的参数(因此你收到警告)::

stop(simpleError('achtung!'))
# Error: achtung!
stop(simpleError('achtung!'), call.=F) # gives the warning
# Error: achtung!
# In addition: Warning message:
# In stop(simpleError("achtung!"), call. = F) :
# additional arguments ignored in stop()
stop(simpleError('achtung!', call=call('f')))
# Error in f() : achtung!

根据特定代码中错误的构造方式,您可以设置 callNULL在调用 stop 时抑制错误的创建.

你可以:

  • 修改调用stop(someConditionObject) 的代码调用stop使用该对象的消息(这样调用就不会通过)
  • 修改你的stop测试是否inherits(args[[1L]], "condition")并将调用设置为 NULL如果call.=F抑制它(error$call <- NULL),然后调用base::stop(error)没有 call.争论。

关于r - stop() 中忽略的附加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com