язык R.
У меня есть пара файлов:
utilities.non.foo.R
utilities.foo.R
utilities.R
foo
- это внутренняя упаковка, которая была скомбинирована (для обработки изображений, хотя это не имеет значения). Он прекрасно работает, но только на компьютерах с Linux, и очень сложно попробовать скомпилировать его даже на этих компьютерах.
По сути, utilities.foo.R
содержит множество функций, для которых требуется пакет foo
.
Функции здесь называются functionname.foo
.
Я собираюсь начать делиться этим кодом с внешними соавторами, у которых нет этого пакета или Linux, поэтому я написал файл utilities.non.foo.R
, который содержит все функции в utilities.foo.R
, кроме зависимости от пакет foo
был удален.
Все эти функции называются functionname.non.foo
.
Файл utilities.R
имеет целую кучу для каждой функции:
functionname <- function(...) {
if ( fooIsLoaded() ) {
functionname.foo(...)
} else {
functionname.non.foo(...)
}
}
Идея состоит в том, что нужно всего лишь загрузить utilities.R
, и если у вас окажется пакет foo
(например, мои внутренние сотрудники), вы будете использовать этот бэкэнд. Если у вас нет foo
(внешних соавторов), вы будете использовать бэкэнд не-foo.
Мой вопрос: есть ли способ сделать перенаправление для каждого имени функции без явного написания вышеуказанного бита кода для каждого отдельного имени функции?
Это напоминает мне о том, как (например) существует метод print
, print.table
, print.data.frame
и т. Д., Но пользователю нужно только использовать print
, и какой метод используется, выбирается автоматически.
Мне бы хотелось, чтобы, кроме method.class
, было бы больше похоже на method.depends_on_which_package_is_loaded
.
Есть ли способ избежать написания функции перенаправления для каждой функции в моем файле utilities.R
?