[Rd] eval(parse()) within mutate() returning same value for all rows

Jan Gorecki j@goreck| @end|ng |rom w|t@edu@p|
Fri Dec 29 17:10:13 CET 2023


Unless you are able to reproduce the problem without dplyr then you should
submit your question to dplyr issues tracker. R-devel is for issues in R,
not in a third party packages.

On Fri, Dec 29, 2023, 15:13 Mateo Obregón <obregonmateo using gmail.com> wrote:

> Hi all-
>
> Looking through stackoverflow for R string combining examples, I found the
> following from 3 years ago:
>
> <
> https://stackoverflow.com/questions/63881854/how-to-format-strings-using-values-from-other-column-in-r
> >
>
> The top answer suggests to use eval(parse(sprintf())). I tried the
> suggestion
> and it did not return the expected combines strings. I thought that this
> might
> be an issue with some leftover values being reused, so I explicitly eval()
> with a new.env():
>
> > library(dplyr)
> > df <- tibble(words=c("%s plus %s equals %s"),
> args=c("1,1,2","2,2,4","3,3,6"))
> > df |> mutate(combined = eval(parse(text=sprintf("sprintf('%s', %s)",
> words,
> args)), envir=new.env()))
>
> # A tibble: 3 × 3
>   words                args  combined
>   <chr>                <chr> <chr>
> 1 %s plus %s equals %s 1,1,2 3 plus 3 equals 6
> 2 %s plus %s equals %s 2,2,4 3 plus 3 equals 6
> 3 %s plus %s equals %s 3,3,6 3 plus 3 equals 6
>
> The `combined`  is not what I was expecting, as the same last eval() is
> returned for all three rows.
>
> Am I missing something? What has changed in the past three years?
>
> Mateo.
> --
> Mateo Obregón
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list