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
语句并逐步执行结果.