Преобразование приведенных аргументов в строку - PullRequest
1 голос
/ 12 марта 2020

У меня есть простая функция в R с ..., использующая tidyeval. Можно ли изменить их в строку?

simple_paste <- function(...){
  my_vars <- enquos(...)
  paste(..., sep = "_x_")
}

simple_paste(hello, world)

В качестве вывода я хотел бы получить "hello_x_world". Я мог бы также рассмотреть возможность использования функции glue или str_c вместо paste, хотя я не уверен, что будет лучше.

1 Ответ

4 голосов
/ 12 марта 2020

Преобразование выражения в символ, а затем paste

simple_paste <- function(...) {
  purrr::map_chr(enquos(...), rlang::as_label) %>% 
          paste(collapse="_x_")
   }
simple_paste(hello, world)
#[1] "hello_x_world"

Или другой вариант - eval использовать выражение

simple_paste <- function(...)  eval(expr(paste(!!! enquos(...), sep="_x_")))[-1]
simple_paste(hello, world)
#[1] "hello_x_world"

, если нам нужно .csv в конце

simple_paste <- function(...)  eval(expr(paste0(paste(!!! enquos(...), sep="_x_"), ".csv")))[-1]
simple_paste(hello, world)
#[1] "hello_x_world.csv"
...