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 <obregonma...@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@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

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to