停止函数中的R.call参数

时间:2015-03-28 22:05:35

标签: r

.call函数中stop参数的用途是什么?

帮助页面(stop)说明了:

  

呼叫。 logical,表示调用是否应成为错误消息的一部分。

有人可以用一个直观的例子解释.call参数吗?

由于

1 个答案:

答案 0 :(得分:6)

亲自尝试一下:

f = function () stop('foo')

g = function () stop('bar', call. = FALSE)

f() # Error in f(): foo
g() # Error: bar

...并比较输出。这是唯一的区别。

参数的使用是指您希望隐藏最终用户的不相关细节,否则这些细节会淹没实际的错误消息或积极误导。

例如,I have a package包含以下函数 1

#' @export
import = function (module, ...) {
    # … some code here …
    module_path = find_module(module)
    # … more code here …
}

find_module = function (module) {
    # … some code here …
    if (no_module_found)
        stop('Unable to load module ', module, '.', call. = FALSE)
}

现在,您可以看到函数import是从包中导出的,但函数find_module不是。因此,用户不知道这个功能,不应该知道:它是一个不相关的实现细节。如果我没有在上面的call. = FALSE中指定stop,那么错误消息将包含对此隐藏函数的引用,这会使包的用户感到困惑。


1 这是一个小谎言,代码现在不同了;但实际上包的早期版本包含此代码。