如何从所需的包中调试未导出的函数?

时间:2015-07-06 20:04:50

标签: r debugging namespaces

我正在使用的软件包中的一个函数给了我不那么信息错误。我不知道发生了什么。该函数由我调用的函数在内部调用。像这样:

myres <- the.func(x)

the.func <-function(x){
    unexported.func(x)
}

如何调试unexported.func? 使用debug无效:

>debug(unexported.func)
Error in debug(undexported.func) : object 'unexported.func' not found

更新 目前我做嵌套调试,如下所示。但我觉得不方便:

>debug(the.func) # Initiate debugging for the outer function, so I get unexported.func loaded.
>myres <- the.func(x)
Browse[2]>debug(unexported.func) # Now I can call debug with this. 

1 个答案:

答案 0 :(得分:8)

您可以通过:::(三重冒号)运算符访问未导出的函数,并使用程序包命名空间名称(即程序包名称)作为前缀。

假设 pkgA 包含未导出的函数unexported.func(),我们将使用以下内容在unexported.func()上设置调试标记:

debug(pkgA:::unexported.func)

如果您不知道要为给定的未导出函数使用哪个包(因此命名空间),您始终可以使用getAnywhere()来确定它。