使用任意数量的参数扩展功能

时间:2019-11-10 09:39:34

标签: r

可以说我具有以下功能foobar

bar <- function(a, b) {
    # Some operations with a and b ...
} 

foo <- function(...) {
    test <- baz(bar(...))
    return (test)
}   

是否有一个函数baz以字符串形式返回bar调用,且字符串扩展了...中指定的参数?所以,当我这样做

> foo(a = 1, b = 2)

我希望得到类似的东西

[1] "bar(a = 1, b = 2)"

这可以通过将参数粘贴到...中来完成,但是我更喜欢一些更干净,更美观的内置解决方案。


因此,可以说bar是一些预构建的函数,在我的情况下是knitr::kable。我将如何获得相同的结果?为此,knitr::kable具有与bar相同的输入,即ab。功能foo现在看起来像这样

foo <- function(...) {
    test <- baz(knitr::kable(...))
    return (test)
}  

所以我想打电话

> foo(a = 1, b = 2)

返回类似

的内容
[1] "kable(a = 1, b = 2)"

2 个答案:

答案 0 :(得分:1)

您可以将match.calldeparse一起使用

bar <- function(a, b) {
   deparse(match.call())
} 

foo <- function(...) {
    test <- bar(...)
    return (test)
}   

foo(a = 1, b = 2)
#[1] "bar(a = 1, b = 2)"

答案 1 :(得分:1)

如果根据问题给出foo,并且它和bar都不被修改,而是要定义一个函数baz,当它从{{1}调用时},如图所示,返回语言对象foo,然后:

bar(a = 1, b = 1)

第二个示例,其中baz <- function(...) { mc <- substitute(list(...), parent.frame()) mc[[1]] <- match.call()[-1][[1]][[1]] mc } # foo is copied from question without change foo <- function(...) { test <- baz(bar(...)) return (test) } foo(a = 1, b = 2) ## bar(a = 1, b = 2) 从上方不变

baz