如何在RStudio中调试(放置断点等)已安装的R包?

kay*_*han 11 debugging r breakpoints rstudio

我需要逐行运行一个函数来了解它是如何工作的.但是该函数是已安装软件包的一部分,我不知道R在哪里存储已安装软件包的源(比如MultiPhen).我在Ubuntu 12(64it)中使用RStudio 0.98.501和R 3.0.2.显然没有存储已安装软件包的源代码,对吧?抱歉,如果这是一个天真的问题,我是R的新手.如果没有存储源,无论如何都要重新安装一个包含源码并调试它(基本上放置一个断点).

谢谢,

世界报

Bro*_*ieG 13

看看trace.下面是在基本包函数的第四个语句中添加断点的示例var.这里我们要求在第六个语句中trace调用该函数browser:

> trace(var, browser, at=6)
Tracing function "var" in package "stats"
[1] "var"
> var(1:10)
Tracing var(1:10) step 6 
Called from: eval(expr, envir, enclos)
Browse[1]> n
debug: if (is.data.frame(y)) y <- as.matrix(y) else stopifnot(is.atomic(y))
Browse[2]> n
debug: stopifnot(is.atomic(y))
Browse[2]> n
debug: .Call(C_cov, x, y, na.method, FALSE)
Browse[2]> n
[1] 9.166667
Run Code Online (Sandbox Code Playgroud)

记得untrace当你完成的时候.你可以做相当复杂的事情trace,但在大多数情况下trace(fun.name, browser)可能已经足够了.

或者,您可以只加载包并在命令行上键入函数的名称,如下所示:

> var
function (x, y = NULL, na.rm = FALSE, use) 
{
    if (missing(use)) 
        use <- if (na.rm) 
            "na.or.complete"
        else "everything"
    na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs", 
        "everything", "na.or.complete"))
    if (is.na(na.method)) 
        stop("invalid 'use' argument")
    if (is.data.frame(x)) 
        x <- as.matrix(x)
    else stopifnot(is.atomic(x))
    if (is.data.frame(y)) 
        y <- as.matrix(y)
    else stopifnot(is.atomic(y))
    .Call(C_cov, x, y, na.method, FALSE)
}
<bytecode: 0x000000000928ad30>
<environment: namespace:stats>
Run Code Online (Sandbox Code Playgroud)

然后,您可以将其复制到编辑器中并使用它,添加browser语句并逐步执行结果.