将 tidyeval 参数转换为字符串

Posted

技术标签:

【中文标题】将 tidyeval 参数转换为字符串
【英文标题】:Converting tidyeval arguments to string将 tidyeval 参数转换为字符串
【发布时间】:2020-06-23 22:24:37
【相关技术】:@tags@
【问题描述】:

我在 R 中有一个简单的函数,使用 tidyeval 使用 ...。是否可以将这些更改为字符串?

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

simple_paste(hello, world)

作为输出,我想得到"hello_x_world"。我也可以考虑使用glue 函数或str_c 而不是paste,虽然我不确定这会更好。

【问题讨论】:


【参考方案1】:

将quosure转换为字符,然后paste

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

或者另一种选择是evaluate 一个表达式

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"

【讨论】:

谢谢!更进一步,您对以.csv 结束字符串有什么建议吗? -- hello_x_world.csv 我建议使用as_string() 而不是quo_name(),这可能会被弃用。如果您真的想要 quo-name 行为,请使用更明确的 as_label()。但是as_string() 看起来就在这里。见?as_label

以上是关于将 tidyeval 参数转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将字典转换为关键字参数字符串?

无法将类型“()”的值转换为预期的参数类型“字符串”

无法将“字符串”类型的值转换为预期的参数类型 [任何]

将命令行参数转换为字符串

无法将参数值从 SqlParameter 转换为字符串

ASIHttpRequest - 如何将参数的 NSDictionary 转换为 url 编码的查询参数字符串?