r - 将点中的名称更改为字符

标签 r names ellipsis

我有一个这样的功能:

my_fun <- function(...,x,y){
  list(...)
}

我希望能够将变量名称或字符串提供给省略号,并在返回之前将所有内容转换为字符。在我的实际情况中,我将通过 do.call(custom_fun,list(...)) 调用自定义函数.

预期输出

我在这里问的是一个函数 my_fun2这将具有以下行为:
my_fun2 <- function(...,x,y){
  MAGIC(list(...))
}

identical(my_fun("a",foo= "b == 3",c("c","d"),bar=c("e","f"),c("g","h")),
          my_fun2("a",foo= b == 3,c("c","d"),bar = c("e",f),c(g,h)))

应该是 TRUE两个术语都返回:
# [[1]]
# [1] "a"
# 
# $foo
# [1] "b == 3"
# 
# [[3]]
# [1] "c" "d"
# 
# $bar
# [1] "e" "f"
# 
# [[5]]
# [1] "g" "h"

我试过的...
my_fun2 <- function(...,x,y){
 lapply(pryr::dots(...),as.character)
}

my_fun2("a",b == 3,c("c","d"),c("e",f),c(g,h))
# [[1]]
# [1] "a"
# 
# [[2]]
# [1] "==" "b"  "3" 
# 
# [[3]]
# [1] "c" "c" "d"
# 
# [[4]]
# [1] "c" "e" "f"
# 
# [[5]]
# [1] "c" "g" "h"

备注

我对表达式、引号、quosures、调用、名称......没有很好的理解,所以我会感谢与案例相关的解释。

我对使用其中一个(或两者!)的解决方案没问题base ( substitutequote 等)和 dplyr答案( enquoquos 等)

最佳答案

我不骄傲,但这是必须的……

library(dplyr)
library(purrr)
library(pryr)
my_fun2 <- function(...,x,y){
  dots0 <- as.character(substitute(alist(...)))[-1]
  vectors <- substr(dots0,1,2) == "c("
  dotsv <- dots0[vectors] %>%
    gsub("\"","",.)    %>% 
    gsub("(","('",.,fixed=TRUE)   %>% 
    gsub(", ","', '",.,fixed=TRUE)  %>%
    gsub(")","')",.,fixed=TRUE)  %>%
    map(~eval(parse(text=.x)))
  setNames(c(as.list(dots0[!vectors]),dotsv),names(pryr::dots(...)))
}

identical(my_fun2("a",foo= "b == 3",c("c","d"),bar = c("e","f"),c("g","h")),
my_fun2("a",foo= b == 3,c("c","d"),bar = c("e",f),c(g,h)))
# [1] TRUE

# [[1]]
# [1] "a"
# 
# $foo
# [1] "b == 3"
# 
# [[3]]
# [1] "c" "d"
# 
# $bar
# [1] "e" "f"
# 
# [[5]]
# [1] "g" "h"

关于r - 将点中的名称更改为字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47291298/

相关文章:

arrays - 如何从两个列表中快速打印

html - 文本溢出省略号在嵌套的 flexbox 中不起作用

c - 在 Windows 上调试 R 的编译代码

r - 按降序排列 facet_wrap 图

重命名 JSON 实体流

c++ - 'default' 作为变量名

r - 如何绘制空图?

mysql - 使用 Delphi 存储 SQL 字段名称和一般 SQL 用法

python - 对于一维 `X` , `X[n]` 和 `X[..., n]` 有什么区别?

r - 使用 dot dot dot (...) 表示从自定义函数返回的列,用于 data.table 对象