将R函数的...转换为字符串

时间:2020-05-29 07:29:37

标签: r dplyr

在R中,我想编写一个函数,它接受一组参数,但不求值,而是将整个参数集作为字符串返回。我发现以下方法可以做到这一点:

ff = function(...) {
  dots = dplyr::enquos(...)
  strs = sub("^[~]","=",sapply(dots,deparse))
  return(paste(paste(names(strs),strs,sep=""),collapse=","))
}

,但是似乎必须有一种更简单,更易用的方式来执行此操作,该方法不依赖于使用基本R函数dplyrquote的{​​{1}},但是我可以没关系。

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用match.call()

ff = function (...) {
    args = match.call()[-1L]
    argvalues = vapply(args, deparse, character(1L))
    paste(names(args), argvalues, sep = ' = ', collapse = ', ')
}

或者,如果仅 想要点而不是潜在的位置参数,则仅将该函数的第一行更改为

args = match.call(expand.dots = FALSE)$...

答案 1 :(得分:0)

以上面的Konrad解决方案为基础,这是我正在使用的最终功能:

ff = function (...) {
  args = match.call(expand.dots=FALSE)$...
  argvalues = vapply(args, deparse, character(1L))
  paste(ifelse(names(args)=="",argvalues,
               paste(names(args), argvalues, sep = ' = ')),
        collapse = ', ')
}

使用此功能,我可以执行以下操作:

> ff(a=1,b=zzz)
[1] "a = 1, b = zzz"
> ff(a=1,zzz)
[1] "a = 1, zzz"