[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