我有一个这样的功能:
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
( substitute
、 quote
等)和 dplyr
答案( enquo
、 quos
等)
最佳答案
我不骄傲,但这是必须的……
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/