gpt4 book ai didi

R:with() 函数内部的 Debug模式

转载 作者:行者123 更新时间:2023-12-02 04:36:14 25 4
gpt4 key购买 nike

出于某种原因,当我的函数主体位于 with() 表达式内时, Debug模式似乎不允许我进入 with() 部分。为什么会这样,有没有办法解决这个问题?下面是一个愚蠢的(但希望可重现的)演示。

    ff=function(x){
print("Hello")
with(iris,{
y=x;
z=y+mean(Sepal.Width);
return(z);})
}

现在进入 Debug模式并试用功能...

    debugonce(ff);debugonce(with);
ff(10)

Debug模式只是跳过 with() 子句,并返回答案 (13.05733)。我如何进入那些内部子句?

最佳答案

这行得通,只是你期望它做的不是它做的。 debug 将查看 with 代码内部,而不是您作为参数传递的代码内部。仔细看:

> ff(10)
debugging in: ff(10)
debug at #1: {
print("Hello")
with(iris, {
y = x
z = y + mean(Sepal.Width)
return(z)
})
}
Browse[2]> n
debug at #2: print("Hello")
Browse[2]> n
[1] "Hello"
debug at #3: with(iris, {
y = x
z = y + mean(Sepal.Width)
return(z)
})
Browse[2]> n

现在看看这里发生了什么,我们正在使用 进行调试:

debugging in: with(iris, {
y = x
z = y + mean(Sepal.Width)
return(z)
})

这是关键:

debug: UseMethod("with")
Browse[3]> n
[1] 13.05733

发生了什么事?查看with代码:

> with
function (data, expr, ...)
UseMethod("with")
<bytecode: 0x00000000092f0e50>
<environment: namespace:base>

如您所见,我们确实调试了 with 中的单行代码。如果您想更详细地了解 with 中发生的情况,您也可以调试 with.default,但我怀疑这是否会达到您想要的效果。我不知道如何间接地做到这一点(即使你可以调试 {,我认为你做不到,那也无济于事,因为你会查看 {,不是 { 的参数,与 with 相同),但作为 hack,您可以使用 browse() :

ff=function(x){
print("Hello")
with(iris,{
browser() # <<<--- this will allow you to browse inside the expression
y=x;
z=y+mean(Sepal.Width);
return(z);})
}

关于R:with() 函数内部的 Debug模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921709/

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