miguel.angel.rodriguez.muinos en sergas.es
2014-Jul-08 11:54 UTC
[R-es] Paquete generado no detectan ambiente particular creado.
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
rubenfcasal
2014-Jul-08 17:42 UTC
[R-es] Paquete generado no detectan ambiente particular creado.
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 >
Eva Prieto Castro
2014-Jul-08 19:44 UTC
[R-es] Paquete generado no detectan ambiente particular creado.
Hola: Rubén, muchas gracias por tus aportaciones. Inicialmente almacenaba la lista global en el entorno global -valga la redundancia- pero cambié de procedimiento a raíz de la paquetización, ya que me topaba con diversos inconvenientes. Puede que esos inconvenientes se debieran a mi ignoracia (que sigue siendo notoria, pero va en disminución) o a la versión de aquel momento, así que lo intentaré de nuevo conforme a tus indicaciones. Y efectivamente, es suficiente con la lista, sin necesidad de crear un entorno específico para ello. Un saludo. Eva El Martes 8 de julio de 2014 19:43, rubenfcasal <rubenfcasal@gmail.com> escribió: 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@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@r-project.org [mailto:r-help-es-bounces@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@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@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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]