调试:搜索特定代码行的包

时间:2014-04-25 08:46:57

标签: r debugging package

我一直在调查this issue,找出哪个软件包会引发以下错误:

  

if(dif< 0&& any(overlap)){:缺少值的地方出错   需要TRUE / FALSE

长话短说,我无法通过tracebackdebug或任何其他调试工具找到错误,因此我下载了包本身及其依赖项的源代码,解压缩并运行

grep any\(overlap\) */R/*

导致

  

directlabels / R / utility.function.R:if(dif< 0&& any(overlap)){

这就是抛出错误的地方,所以任务就完成了。

实际上我在这里有两个主要问题。

  1. 有没有更简单的方法来获得相同的结果?想象一下,我有十个依赖,下载所有这些来源将成为一个痛苦。说,我很想看到类似的东西 search_packages_source <- function(list_of_packages, string),有什么可用的吗?
  2. 为什么traceback / debug未能指向抛出错误的函数? (traceback显示了绘图渲染的轨迹,debug我必须猜测是否要进入或退出,所以我很快就放弃了,请参阅下面的编辑以获取更多细节)我也有尝试过Rstudio的调试工具,它们都没有帮助找到错误。
  3. R中的调试对我来说是一项罕见的任务,所以我可能会遗漏一些非常简单的事情。很高兴听到你的提示&amp;技巧!

    编辑:这是可以复制的代码的快捷方式,并且有点澄清:

    p1 <- ggplot(mtcars, aes(disp, mpg, col=cyl)) + geom_line()
    p2 <- ggplot(subset(mtcars, cyl==4), aes(disp, mpg, col=cyl)) + geom_line()
    # OK
    direct.label(p1, "last.bumpup")
    # error
    direct.label(p2, "last.bumpup")
    

    现在,如果我traceback(),我得到一个long output,但没有指出哪个效用函数失败了。如果我debug(),我会得到even longer output,这也无处可去。所以问题不仅在于我的调试技术缺乏,而且还因为包之间的交叉依赖性。

0 个答案:

没有答案