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, [email protected] 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: [email protected] [mailto:[email protected]] 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 <[email protected]> 
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
[email protected]
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
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es


_______________________________________________
R-help-es mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es

Responder a