[R-es] Paquete generado no detectan ambiente particular creado.

rubenfcasal rubenfcasal en gmail.com
Mar Jul 8 19:42:57 CEST 2014


Hola a todos,

     Simplemente comentar que me llamó la atención el correo de Eva 
porque tenía entendido que el 'namespace' de un paquete se sellaba 
después de cargarlo y por tanto no se podía (en principio) modificar 
objetos. Comprobé que en una versión anterior de R si se podía hacer 
(aunque tuve que modificar algo el ejemplo que envió Eva para que me 
funcionase) y me extrañó, supongo que se pusieron más serios con esta 
cuestión los desarrolladores de R...

     Yo hago cosas similares en ocasiones, pero almaceno los objetos en 
el entorno global en lugar de en el namespace y para evitar problemas 
recurro a las funciones assign, get y exists (si no se trata de un 
paquete, se puede emplear la asignación <<- y acceder al objeto 
directamente por el nombre, que es lo que normalmente hago para trabajar 
con variables globales).

     Por ejemplo, para lo que propones se podría hacer:

   if (exists(".ChrL.env", envir = .GlobalEnv)) {
     stop("Data structures were already initialized.", call.=FALSE)
   } else {
     assign(".ChrL.env", new.env(), envir = .GlobalEnv)
     assign(".ChrL.env$lGlo", list(), envir = .GlobalEnv)
     cat("Libraries have been loaded and data structure has been 
initialized.\n")
   }

# Para acceder a un objeto o componente:
   get(".ChrL.env", envir = .GlobalEnv)
   get(".ChrL.env$lGlo", envir = .GlobalEnv)

     Adicionalmente en este caso puede que te sirva definir el objeto 
simplemente como una lista en lugar de un entorno.
     Comentar también que al empezar por un punto el objeto estaría 
oculto y no debería molestar o interferir con el usuario.

     Un saludo,
         Rubén FC.




El 08/07/2014 13:54, miguel.angel.rodriguez.muinos en sergas.es escribió:
> Hola Eva.
>
> Me alegro de que hayas resuelto el problema!
>
> De todas formas, no tendrá algo que ver con los problemas de "globalización" de las variables que ya has tenido en .ChrL.env (hace un par de años, creo recordar)?.
>
> Un Saludo,
> Miguel.
>
>
>
> -----Mensaje original-----
> De: r-help-es-bounces en r-project.org [mailto:r-help-es-bounces en r-project.org] En nombre de Eva Prieto Castro
> Enviado el: martes, 08 de julio de 2014 13:46
> Para: r-help-es
> Asunto: Re: [R-es] Paquete generado no detectan ambiente particular creado.
>
> Resuelto!!
>
> Retiré esta línea:
>
> .ChrL.env$bStarted <- FALSE
>
>
>
> Se ve que el proceso de paquetización no admite asignaciones; o mejor dicho, bloquea los objetos si además de establecer su tipo se realiza una asignación de valor.
>
> Tengo que extender el ajuste a todo el proyecto, pero -en principio- parece estar resuelta la cuestión; o mejor dicho, el problemón!
>
> Eva
>
>
> El Martes 8 de julio de 2014 12:42, Eva Prieto Castro <evapcastro en yahoo.es> escribió:
>
>
>
> Buenos días:
>
> Por favor, ¿alguien podría crear un script de r con este código que envío e intentar paquetizarlo?. Yo siempre lo conseguía, pero con la versión actual de R (3.1.0), una vez generado el zip del paquete y cargado desde la RGui, no me detecta la existencia del environment que creé (.Ch.env). Es como si ahora el pkt sólo pudiera estar integrado (a efectos prácticos) por funciones, sin admitir la existencia de una estructura de datos subyacente, como es el conjunto formado por lGlo y bStarted, ambas incluidas en el environment creado (.Ch.env)
>
> .Ch.env <- new.env()
> .Ch.env$lGlo <- list()
> .Ch.env$bStarted <- FALSE
>
> CheckGloCreated <- function() {
>    if (.Ch.env$bStarted == TRUE) {
>      stop("Data structures were already initialized.", call.=FALSE)
>    }
> }
> ChrL.Start <- function() {
>    CheckGloCreated()
> .Ch.env$bStarted <- TRUE
>    cat("Tested.\n")
> }
>
>
> Lo único peculiar al paquetizar es que en el Ch-internal.r (si le llamáis Ch al paquete) hay que corregir la línea que genera el package.skeleton y sustituirla por lo siguiente:
>
> .Ch.env <- new.env()
>
>
>
> Gracias de antemano.
>
> Atte.- Eva
>
>      [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>          [[alternative HTML version deleted]]
>
>
> ________________________________
>
> Nota: A información contida nesta mensaxe e os seus posibles documentos adxuntos é privada e confidencial e está dirixida únicamente ó seu destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non está autorizada.
>
> Nota: La información contenida en este mensaje y sus posibles documentos adjuntos es privada y confidencial y está dirigida únicamente a su destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, por favor elimínelo. La distribución o copia de este mensaje no está autorizada.
>
> See more languages: http://www.sergas.es/aviso_confidencialidad.htm
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



Más información sobre la lista de distribución R-help-es