R 回溯中向函数传递了哪些参数?
在R中,如果执行因错误而停止,我可以计算R 回溯中向函数传递了哪些参数?,r,debugging,R,Debugging,在R中,如果执行因错误而停止,我可以计算traceback(),查看错误发生在哪个函数中,该函数是从哪个函数调用的,等等。它将给出如下结果: 8: ar.yw.default(x, aic = aic, order.max = order.max, na.action = na.action, series = series, ...) 7: ar.yw(x, aic = aic, order.max = order.max, na.action = na.action,
traceback()
,查看错误发生在哪个函数中,该函数是从哪个函数调用的,等等。它将给出如下结果:
8: ar.yw.default(x, aic = aic, order.max = order.max, na.action = na.action,
series = series, ...)
7: ar.yw(x, aic = aic, order.max = order.max, na.action = na.action,
series = series, ...)
6: ar(x[, i], aic = TRUE)
5: spectrum0.ar(x)
4: effectiveSize(x)
有没有办法找到传递给这些函数的参数?在本例中,我想知道传递给effectiveSize()
的参数是什么,即x
是什么
错误不会发生在我自己的代码中,而是发生在包函数中。作为R的新手,我有点迷路了
由于不知道如何正确执行此操作,我试图找到包函数的定义并对其进行修改,但源文件应该在哪里,我只找到一个.rdb
文件。我假设这是一个字节编译的东西。您可以使用trace()
标记或标记一个函数,使其需要“绕道”到另一个函数,逻辑选择是browser()
?trace
?browser
> trace(mean)
> mean(1:4)
trace: mean(1:4)
[1] 2.5
所以刚才显示的是通话。下一个小会话将显示实际上绕过浏览器的跟踪:
> trace(mean, browser)
Tracing function "mean" in package "base"
[1] "mean"
> mean(1:4)
Tracing mean(1:4) on entry
Called from: eval(expr, envir, enclos)
Browse[1]> x #once in the browser you can see what values are there
[1] 1 2 3 4
Browse[1]>
[1] 2.5
> untrace(mean)
Untracing function "mean" in package "base"
就查看函数中的内容而言,如果导出了函数,您只需在控制台中键入其名称即可。如果未导出,请使用:
getAnywhere(fn\u name)
我建议设置选项(error=recover)
,然后再次运行有问题的代码。这一次,当遇到错误时,您将被扔进一个交互式调试环境中,在这个环境中,您可以选择要调查的帧。它看起来很像traceback()
提供给您的,只是您可以键入7
以进入调用堆栈上调用7
的评估环境。输入一个框架后,键入ls()
,将显示其参数列表
举例说明(基于?回溯)可能是最好的方式:
foo <- function(x) { print(1); bar(2) }
bar <- function(x) { x + a.variable.which.does.not.exist }
## First with traceback()
foo(2) # gives a strange error
# [1] 1
# Error in bar(2) : object 'a.variable.which.does.not.exist' not found
traceback()
# 2: bar(2) at #1
# 1: foo(2)
## Then with options(error=recover)
options(error=recover)
foo(2)
# [1] 1
# Error in bar(2) : object 'a.variable.which.does.not.exist' not found
#
# Enter a frame number, or 0 to exit
#
# 1: foo(2)
# 2: #1: bar(2)
Selection: 1
# Called from: top level
Browse[1]> ls()
# [1] "x"
Browse[1]> x
# [1] 2
Browse[1]> ## Just press return here to go back to the numbered list of envts.
#
# Enter a frame number, or 0 to exit
#
# 1: foo(2)
# 2: #1: bar(2)
foox
# [1] 2
浏览[1]>###只需按return here返回编号的环境列表。
#
#输入帧编号,或输入0退出
#
#1:foo(2)
#2:#1:bar(2)
R有许多有用的调试工具,其中大部分都在几年前的答案中讨论过。请您详细说明一下,或者举个例子好吗?对于初学者来说,这是非常密集的。