這是有效的,它只是你期望它做的不是它所做的。 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
現在看看這裏發生了什麼,我們正在調試中with
:
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
),但作爲一個黑客可以使用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);})
}
據調試'with',它只是你唯一指定的調試,做的方法分派的部分。嘗試調試'with.default'。 – joran