[Rd] replicate evaluates its second argument in wrong environment

David Winsemius dw|n@em|u@ @end|ng |rom comc@@t@net
Tue Feb 16 00:05:17 CET 2021


On 2/15/21 1:10 PM, Hadley Wickham wrote:
> This is a nice example of the motivation for tidy evaluation — since
> enquo() captures the environment in which the promise should be
> evaluated, there's no need for an additional explicit argument.
>
> library(rlang)
>
> replicate2 <- function (n, expr, simplify = "array") {
>    exnr <- enquo(expr)

It does not appear that the line above would accomplish anything given 
the succeeding line. Or am I missing something? Taking it out doesn't 
seem to affect results. Whatever magic there is seems to be in the 
`eval_tidy` function, whose mechanism or rules seem opaque. Was "exnr" 
supposed to be passed to `eval_tidy`?

-- 

David.

>    sapply(integer(n), function(i) eval_tidy(expr), simplify = simplify)
> }
>
> doRep2 <- function(a, b) sapply(a, replicate2, b)
> doRep2(3, 2)
> #>      [,1]
> #> [1,]    2
> #> [2,]    2
> #> [3,]    2
>
> Hadley
>
> On Sat, Feb 13, 2021 at 7:09 AM Gabor Grothendieck
> <ggrothendieck using gmail.com> wrote:
>> Currently replicate used within sapply within a function can fail
>> because it gets the environment for its second argument, which is
>> currently hard coded to be the parent frame, wrong.  See this link for
>> a full example of how it goes wrong and how it could be made to work
>> if it were possible to pass an envir argument to it.
>>
>> https://stackoverflow.com/questions/66184446/sapplya-replicate-b-expression-no-longer-works-inside-a-function/66185079#66185079
>>
>> --
>> Statistics & Software Consulting
>> GKX Group, GKX Associates Inc.
>> tel: 1-877-GKX-GROUP
>> email: ggrothendieck at gmail.com
>>
>> ______________________________________________
>> R-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>



More information about the R-devel mailing list