可以说我具有以下功能foo
和bar
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相同的输入,即a
和b
。功能foo现在看起来像这样
foo <- function(...) {
test <- baz(knitr::kable(...))
return (test)
}
所以我想打电话
> foo(a = 1, b = 2)
返回类似
的内容[1] "kable(a = 1, b = 2)"
答案 0 :(得分:1)
您可以将match.call
与deparse
一起使用
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