Message-ID: <90e90d9c-5f31-8d37-44e3-9681d29ac5dd@gmail.com>
Date: 2017-09-09T01:55:12Z
From: Duncan Murdoch
Subject: quote()/eval() question
In-Reply-To: <CAAyVsXKhLgabuUjUtYtWhVkFL6L6ud8dXe5fNTS8pZqkCH7ZrQ@mail.gmail.com>
On 08/09/2017 7:55 PM, Axel Urbiz wrote:
> Dear list,
>
> For a reason it would take me long to explain, I need to do something along
> the lines of what's shown below -- i.e., create an object from
> dplyr::summarise, and then evaluate it on a data frame.
>
> I know I could directly do:
>
> df %>% dplyr::summarise(x1_mean = mean(x1))
>
> but this is not what I'm looking for.
>
>
> library(dplyr)
>
> df <- data.frame(x1 = rnorm(100), x2 = rnorm(100))
>
> foo <- function(df) {
>
> mySummary <- quote(dplyr::summarise(x1_mean = mean(x1)))
>
> df %>% eval(mySummary)
magrittr pipes are just syntactic sugar. What your second line does is
the same as
eval(df, mySummary)
which makes no sense. These would work:
eval(df, expr = mySummary)
eval(mySummary, envir = df)
You could write the first as
df %>% eval(expr = mySummary)
and the second as
df %>% eval(mySummary, envir = .)
Duncan Murdoch
>
> }
>
> foo(df)
>
> Error in eval(., mySummary) : invalid 'envir' argument of type 'language'
>
> Thank you,
> Axel.
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>