eval(parse()) within mutate() returning same value for all rows
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 at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel