Объединить attach
и sys.source
источник в окружающую среду и приложить эту среду. Здесь у меня есть две функции в файле my_fun.R
:
foo <- function(x) {
mean(x)
}
bar <- function(x) {
sd(x)
}
Перед тем, как загрузить эти функции, они, очевидно, не нашли:
> foo(1:10)
Error: could not find function "foo"
> bar(1:10)
Error: could not find function "bar"
Создать среду и источник файла в нем:
> myEnv <- new.env()
> sys.source("my_fun.R", envir = myEnv)
Все еще не видно, поскольку мы ничего не приложили
> foo(1:10)
Error: could not find function "foo"
> bar(1:10)
Error: could not find function "bar"
и когда мы делаем это, они видны, и потому, что мы прикрепили копию среды на пути поиска функции выжить будучи rm()
-ed:
> attach(myEnv)
> foo(1:10)
[1] 5.5
> bar(1:10)
[1] 3.027650
> rm(list = ls())
> foo(1:10)
[1] 5.5
Я все еще думаю, что вы бы лучше с вашим собственным личным пакетом, но выше может быть достаточно тем временем. Просто помните, что копия на пути поиска - это именно та, копия. Если функции довольно стабильны, и вы их не редактируете, то это может быть полезно, но это, вероятно, больше хлопот, чем того стоит, если вы разрабатываете функции и модифицируете их.
Второй вариант, это просто назвать их всех .foo
, а не foo
, как ls()
не будет возвращать объекты, названные так, если аргумент all = TRUE
не установлен:
> .foo <- function(x) mean(x)
> ls()
character(0)
> ls(all = TRUE)
[1] ".foo" ".Random.seed"
Личные пакеты подходят для этого, хотя мне все еще раздражает, что вам нужно перепрыгнуть через так много обручей, чтобы построить пакет. Почему я должен предоставить документацию для каждой функции в личном пакете? –
Возможно, потому, что мы не хотим иметь недокументированные пакеты на CRAN, и если R Core должен был пропустить некоторые проверки, им пришлось бы написать целую кучу кода, чтобы можно было установить и загрузить недостающий пакет. Существуют инструментальные средства, предоставляемые для написания неофициальных пакетов - например, roxygen - поэтому вы поддерживаете исходный файл (без Rd-файлов) и генерируете файлы пакетов из них. –
И вам не нужно документировать каждую функцию. Просто вставьте \ alias {} для каждой функции в один файл справки, и этого должно быть достаточно, чтобы победить проверку. Вам не нужны секции \ usage {} и т. Д., Поэтому не предоставляйте их. Этот трюк используется довольно часто для внутренних функций пакета до того, как NAMESPACES были широко использованы. –