gpt4 book ai didi

debugging - R中发生错误后获取变量的状态

转载 作者:行者123 更新时间:2023-12-02 06:28:18 26 4
gpt4 key购买 nike

假设我刚刚调用了一个函数 f,并且该函数中的某处发生了错误。我只是希望能够在错误发生之前检查不同变量的值。

假设我的直觉告诉我这是一个小错误,所以我懒得使用 debug(f) 也懒得将 browser() 插入到该部分中我认为出现问题的函数。而且我太懒了,懒得开始输入 print() 语句。

这是一个例子:

x <- 1:5
y <- x + rnorm(length(x),0,1)
f <- function(x,y) {
y <- c(y,1)
lm(y~x)
}

调用f(x,y)我们得到以下错误:

Error in model.frame.default(formula = y ~ x, drop.unused.levels = TRUE) : 
variable lengths differ (found for 'x')

在这个例子中,我想在调用lm()之前获取环境的状态;这样我就可以调用 xy 并看到它们的长度不同。 (这个例子可能太简单了,但我希望它能传达这个想法。)

最佳答案

正如所指出的here ,有一个简单的方法可以做到这一点,我认为这个技巧有可能让生活变得更好。

首先,调用此:

options(error=recover)

现在,当我们调用 f(x,y) 时,我们将可以选择要恢复的环境。这里我选择选项 1,它会打开一个调试器,让我在调用 lm() 之前使用变量。

> f(x,y)
Error in model.frame.default(formula = y ~ x, drop.unused.levels = TRUE) :
variable lengths differ (found for 'x')

Enter a frame number, or 0 to exit

1: f(x, y)
2: lm(y ~ x)
3: eval(mf, parent.frame())
4: eval(expr, envir, enclos)
5: model.frame(formula = y ~ x, drop.unused.levels = TRUE)
6: model.frame.default(formula = y ~ x, drop.unused.levels = TRUE)

Selection: 1
Called from: eval(expr, envir, enclos)
Browse[1]> x
[1] 1 2 3 4 5
Browse[1]> y
[1] 1.6591197 0.5939368 4.3371049 4.4754027 5.9862130 1.0000000

关于debugging - R中发生错误后获取变量的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1412582/

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