Развернуть функцию с произвольным числом аргументов - PullRequest
1 голос
/ 10 ноября 2019

Допустим, у меня есть функции 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)"

1 Ответ

1 голос
/ 10 ноября 2019

Вы можете использовать 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)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...