Объедините 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"