在 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,
series = series, ...)
6: ar(x[, i], aic = TRUE)
5: spectrum0.ar(x)
4: effectiveSize(x)
有没有办法找到传递给这些函数的参数?在这种情况下,我想知道传递给什么参数effectiveSize()
,即什么是x
.
该错误不是发生在我自己的代码中,而是发生在包函数中。作为 R 新手,我有点迷失。
不知道如何正确执行此操作,我尝试找到包函数的定义并修改它,但是源文件应该在哪里我只找到一个.rdb
文件。我认为这是字节编译的东西。
我建议设置options(error=recover)
然后再次运行有问题的代码。这次,当遇到错误时,您将进入交互式调试环境,在该环境中您可以选择要调查的框架。它会look很像什么traceback()
给你,除了你可以输入7
进入调用的评估环境7
在调用堆栈上。打字ls()
一旦你进入一个框架,就会给你它的参数列表。
一个例子(基于?traceback
)可能是展示这一点的最佳方式:
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)
R 有许多有用的调试工具,其中大部分都在答案中讨论对于这个问题 https://stackoverflow.com/questions/4442518/general-suggestions-for-debugging-r/5156351#5156351从几年前开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)