studio read leer importar exploracion datos cargar r load package internal rda

read - ¿Cómo maneja los datos R internos de un paquete?



leer datos en r (2)

El paquete R que estoy desarrollando requiere varios objetos de datos R, como modelos y parámetros precalculados.

Actualmente tengo cada objeto en el directorio ''datos'' del paquete en archivos .RData individuales. Al usar el paquete, los usuarios pueden usar la función "datos" para adjuntar estos objetos a su entorno.

El comportamiento que me gustaría en cambio sería que al cargar el paquete, los objetos de datos se adjunten automáticamente al entorno del paquete interno y no sean accesibles para el usuario directamente.

Entiendo que colocar un archivo ''sysdata.rda'' en el directorio ''R'' del paquete que contiene los objetos actualmente en ''datos'' me dará el resultado deseado. Sin embargo, ¿hay una manera de hacer esto para que pueda tener cada objeto en un archivo separado en lugar de agruparlo?


Coloque su archivo sysdata.rda en el directorio de data de su paquete.

No use Lazy Data: su archivo de DESCRIPCIÓN no debe tener una línea para LazyData o, si lo hace, debe ser LazyData: no

En cualquier archivo .R en el directorio R de su paquete, agregue una línea como esta

data(sysdata, envir=environment())

data.frame un data.frame llamado data.frame y lo sysdata.rda en un archivo llamado sysdata.rda en el directorio de datos de un paquete llamado anRpackage

Agregué la línea anterior a un archivo .R, y también agregué esta función no exportada solo para mostrar que las funciones en el paquete tienen acceso a los datos.

foo <- function() tail(sysdata, 2)

Entonces veo la siguiente sesión de una R

> library(anRpackage) > sysdata Error: object ''sysdata'' not found > anRpackage:::sysdata A B C 1 1 6 a 2 2 7 b 3 3 8 c 4 4 9 d 5 5 10 e > anRpackage:::foo() A B C 4 4 9 d 5 5 10 e

Por lo tanto, los usuarios aún tienen acceso a los datos, pero como usted solicitó, no tienen acceso directo . El usuario todavía tiene la opción de ejecutar data(sysdata) .


Puede usar el .onLoad() para llamar a los data() cuando se está cargando su paquete, y especificar el espacio de nombres del paquete como el entorno donde cargar los objetos de datos.

Asumiendo que tiene los archivos model1.R y mydata.RData en el directorio de data/ de su paquete llamado foopkg , defina la función

.onLoad <- function(libname, pkgname) { data("model1", "mydata", package=pkgname, envir=parent.env(environment())) }

en algún lugar de su paquete (por ejemplo, en foopkg-package.R ).

Después de construir e instalar el paquete,

> library(foopkg) > ls(loadNamespace("foopkg"))

debe demostrar que los diversos objetos de datos se cargaron correctamente en el espacio de nombres del paquete, es decir, visibles para las funciones de su paquete pero que no contaminan el entorno global.