Combina attach
y sys.source
para crear un entorno y anexar ese entorno. Aquí tengo dos funciones en el archivo my_fun.R
:
foo <- function(x) {
mean(x)
}
bar <- function(x) {
sd(x)
}
Antes de cargar estas funciones, que son obviamente no encontrado:
> foo(1:10)
Error: could not find function "foo"
> bar(1:10)
Error: could not find function "bar"
Crear un entorno y la fuente el archivo en él:
> myEnv <- new.env()
> sys.source("my_fun.R", envir = myEnv)
Todavía no es visible ya que no hemos adjuntado nada
> foo(1:10)
Error: could not find function "foo"
> bar(1:10)
Error: could not find function "bar"
y cuando lo hacemos, que son visibles, y porque hemos adjuntado una copia del medio ambiente a la ruta de búsqueda de las funciones sobreviven siendo 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
aún así creo que sería mejor con su propio paquete personal, pero lo anterior podría ser suficiente mientras tanto. Solo recuerde que la copia en la ruta de búsqueda es solo eso, una copia . Si las funciones son bastante estables y no las está editando, lo anterior puede ser útil, pero probablemente sea más complicado de lo que vale si está desarrollando las funciones y modificándolas.
Una segunda opción es sólo les nombrar a todos .foo
en lugar de foo
como ls()
no volverá objetos nombrados como que a menos que el argumento all = TRUE
se establece:
> .foo <- function(x) mean(x)
> ls()
character(0)
> ls(all = TRUE)
[1] ".foo" ".Random.seed"
Los paquetes personales están bien para esto, aunque todavía me molesta que tenga que pasar por tantos aros para crear un paquete. ¿Por qué tengo que proporcionar documentación para cada función en un paquete personal? –
Probablemente porque no queremos paquetes no documentados en CRAN, y si R Core permitiera eludir algunas comprobaciones, tendrían que escribir un montón de código para permitir que uno instale y cargue un paquete deficiente. Hay herramientas de usuario proporcionadas para ayudar a escribir paquetes informales, como roxygen, para que pueda mantener un archivo fuente (sin archivos Rd) y generar los archivos del paquete a partir de ellos. –
Y no tiene que documentar cada función. Simplemente inserte un \ alias {} para cada función en un solo archivo de ayuda y eso debería ser suficiente para evitar la comprobación. No necesita \ use {} secciones, etc., así que no las proporcione. Este truco se usa con bastante frecuencia para las funciones internas del paquete antes de que se utilizaran NAMESPACES. –