[Rd] eval(parse()) within mutate() returning same value for all rows
Gabor Grothendieck
ggrothend|eck @end|ng |rom gm@||@com
Fri Dec 29 19:45:06 CET 2023
If the question is how to accomplish this as opposed to how to use eval
then we can do it without eval like this provided we can assume that words
contains three %s .
library(dplyr)
library(tidyr)
df <- tibble(words=c("%s plus %s equals %s"),args=c("1,1,2","2,2,4","3,3,6"))
df |>
separate_wider_delim(args, ",", names = c("a", "b", "c")) |>
mutate(combined = sprintf(words, a, b, c))
## # A tibble: 3 × 5
## words a b c combined
## <chr> <chr> <chr> <chr> <chr>
## 1 %s plus %s equals %s 1 1 2 1 plus 1 equals 2
## 2 %s plus %s equals %s 2 2 4 2 plus 2 equals 4
## 3 %s plus %s equals %s 3 3 6 3 plus 3 equals 6
On Fri, Dec 29, 2023 at 9:14 AM 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
--
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com
More information about the R-devel
mailing list