我想在我的包中调用表单时更改call.参数的默认值stop()。因此,这些包包含一个(非导出)版本,stop该版本使用另一个默认值:
stop <- function(..., call. = FALSE, domain = NULL){
base::stop(..., call. = call., domain = domain);
}
Run Code Online (Sandbox Code Playgroud)
这符合我的意图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()
Run Code Online (Sandbox Code Playgroud)
错误由 r-base 在stop.R中引发。除了参数的不同默认值之外,我如何编写一个stop与 完全相同base::stop的call.函数?
base::stop如果您使用条件(例如从 a 捕获错误tryCatch)作为参数和供应call.or调用它,则将始终发出该警告domain。
这是因为check in base::stop
if (length(args) == 1L && inherits(args[[1L]], "condition")) {
....
if (nargs() > 1L) # give the warning
Run Code Online (Sandbox Code Playgroud)
这里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!
Run Code Online (Sandbox Code Playgroud)
根据特定代码中错误的构造方式,您可以在创建错误时设置call为 以NULL在调用stop.
你可以:
stop(someConditionObject)使其仅stop使用该对象的消息进行调用(以便不传递调用)stop测试是否inherits(args[[1L]], "condition")并设置呼叫NULL,如果call.=F压制它(error$call <- NULL),并且然后调用base::stop(error)无call.参数。| 归档时间: |
|
| 查看次数: |
420 次 |
| 最近记录: |