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