在R中,我想编写一个函数,它接受一组参数,但不求值,而是将整个参数集作为字符串返回。我发现以下方法可以做到这一点:
ff = function(...) {
dots = dplyr::enquos(...)
strs = sub("^[~]","=",sapply(dots,deparse))
return(paste(paste(names(strs),strs,sep=""),collapse=","))
}
,但是似乎必须有一种更简单,更易用的方式来执行此操作,该方法不依赖于使用基本R函数dplyr
和quote
的{{1}},但是我可以没关系。
有更好的方法吗?
答案 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"