gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:41:22 26 4
gpt4 key购买 nike

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

谢谢

凯汉

最佳答案

查看跟踪。下面是在基本包函数 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

完成后请记住取消跟踪。您可以使用 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>

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

关于r - 如何在 RStudio 中调试(放置断点等)已安装的 R 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22000969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com