[Rd] trace creates object in base namespace if called on function argument

Tomas Kalibera tom@@@k@||ber@ @end|ng |rom gm@||@com
Wed Aug 26 14:17:00 CEST 2020


Please note that this is documented in ?trace. "fun" is matched to what, 
it is a _name_ of the function to be traced, which is traced in the 
top-level environment. I don't know why it was designed this way, but it 
is documented in detail, and hence the expected behavior.

Debugging is often, and also in R, implemented in the core. Tracing is 
implemented on top without specific support, it thus cannot do some 
things debugging can do.

Tomas


On 8/26/20 3:31 AM, Antoine Fabri wrote:
> Apologies there is one line missing in my last email, the code should be :
>
> foo <- function() "hello"
> trace2 <- function(fun) trace(fun, quote(print("!!!")))
> trace2(foo) # <- THIS LINE WAS MISSING
> base::fun
>
> Best,
>
> Antoine
>
> Le mar. 25 août 2020 à 22:02, Antoine Fabri <antoine.fabri using gmail.com> a
> écrit :
>
>> Dear R-devel,
>>
>> I don't think this is expected :
>>
>> foo <- function() "hello"
>> trace2 <- function(fun) trace(fun, quote(print("!!!")))
>> base::fun
>> # Object with tracing code, class "functionWithTrace"
>> # Original definition:
>> # function() "hello"
>> #
>> # ## (to see the tracing code, look at body(object))
>>
>> `untrace()` has the same behavior.
>>
>> This is inconsistent with how debug works :
>>
>> foo <- function() "hello"
>> debug2 <- function(fun) debug(fun)
>> debug2(foo)
>> isdebugged(foo)
>> # [1] TRUE
>>
>> This can be worked around by defining :
>>
>> trace2 <- function(fun) eval.parent(substitute(trace(fun,
>> quote(print("!!!")))
>>
>> but I believe the current behavior is undesired and it'd be better to make
>> it behave as `debug()`, or to throw an error.
>>
>> Best,
>>
>> Antoine
>>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list