[R-es] Ocultar componentes de una lista

Carlos J. Gil Bellosta cgb en datanalytics.com
Mie Mayo 29 11:55:42 CEST 2013


Hola, ¿qué tal?

El que una función de un paquete sea o no visible es una elección de
su autor. Tiene todo el sentido del mundo ocultar ciertas funciones
auxiliares que llaman las funciones del paquete pero que se supone que
no están pensadas para ser invocadas directamente por el usuario
final.

Eso sí, hay maneras (usar getAnywhere es una de ellas) de ver su
código (p.e., para solucionar errores en un programa).

Salud,

Carlos J. Gil Bellosta
http://www.datanalytics.com



El día 28 de mayo de 2013 23:01, Gabriel Trujillo Paucar
<gabriel_enter en hotmail.com> escribió:
> Hola Eva,
>
>
>
> Gracias por la respuesta fue de mucha ayuda. Lo que me gustaria saber es por que solo algunas funciones que usan el metodo S3 son visibles en su estructura con la funcion "body". Por ejemplo si coloco
>
>
>
> body(print.ts)
>
>
>
> Me va a salir la estructura de esa funcion, sin embargo si coloco
>
>
>
> body(print.nls)
>
>
>
> Me sale el siguiente mensaje :Error in body(print.nls) : object 'print.nls' not found
>
>
>
> A pesar de que esa funcion tambien existe, ya que la encuentras cuando colocas methods(print) solo que con un asterisco al costado diciendo que so son visibles.
>
> ¿Sabes por que es esto? La manera a la cual pude observar la estructura de la funcion "print.nls" fue de la forma en la que Carlos me habia escrito anteriormente:
>
>
>
> getAnywhere(print.nls)
>
>
>
> Esa es una de las dudas que tengo
>
>
> Gabriel Antonio Trujillo Paucar
> Estudiante de Biologia
>      997603768
>
>
>
>
>
>
> Date: Tue, 28 May 2013 20:49:26 +0100
> From: evapcastro en yahoo.es
> Subject: Re: [R-es] Ocultar componentes de una lista
> To: r-help-es en r-project.org; gabriel_enter en hotmail.com
>
>
>
>
>
>
> Perdón por el goteo.
>
> Gabriel, aquí tienes el código de nls:
>
> http://svn.r-project.org/R/trunk/src/library/stats/R/nls.R
>
> Si buscas "print.nls" verás que corresponde al modo en que se muestra el objeto que retorna la función.
>
> En definitiva: Tú cuando creas una función, el objeto que retornas se va a mostrar completamente salvo que exista una función print en la clase a la cual pertenece el objeto, en cuyo caso el modo de mostrarse se regirá por dicha función. Cuando entiendas el concepto de clase y lo que ello implica en cuanto a funciones print, plot, etc. ésto te parecerá muy simple.
>
> Saludos.
>
> Eva
>
> --- El mar, 28/5/13, Gabriel Trujillo Paucar <gabriel_enter en hotmail.com> escribió:
>
>
> De: Gabriel Trujillo Paucar <gabriel_enter en hotmail.com>
> Asunto: [R-es] Ocultar componentes de una lista
> Para: "r-help-es en r-project.org" <r-help-es en r-project.org>
> Fecha: martes, 28 de mayo, 2013 18:25
>
>
> Saludos a todos,
>
>
>
> Quisiera saber como ocultar algunos componentes de una lista para que cuando crees una funcion solo se muestre una parte de esa lista, y que al resto tengas acceso cuando descompongas ese objeto, por ejemplo:
>
>
>
> Tengo la siguiente data:
>
>
>
> data=data.frame(Samples=1:10,Sobs=c(12.6,22.4,27.4,30.5,32.5,34.3,36,37.4,38.9,39.9))
>
>
>
> Cuando uso la funcion nls:
>
>
>
> A <- nls(Sobs~A*Samples/(1+(B*Samples)), start=list(A=5, B=1), data=data)
>
>
>
> El resultado que me arroja es :
>
>
>
> Nonlinear regression model
>   model: Sobs ~ A * Samples/(1 + (B * Samples))
>    data: data
>       A       B
> 19.0918  0.3822
> residual sum-of-squares: 3.295
>
> Number of iterations to convergence: 6
> Achieved convergence tolerance: 9.867e-06
>
>
>
> sin embargo la estructura completa del objeto que produce la funcion "nls" se puede ver con la funcion "str" :
>
>
>
> str(A)
>
>
>
> la cual es la siguiente:
>
>
>
> List of 6
> $ m          :List of 16
>   ..$ resid     :function ()
>   ..$ fitted    :function ()
>   ..$ formula   :function ()
>   ..$ deviance  :function ()
>   ..$ lhs       :function ()
>   ..$ gradient  :function ()
>   ..$ conv      :function ()
>   ..$ incr      :function ()
>   ..$ setVarying:function (vary = rep(TRUE, length(useParams)))
>   ..$ setPars   :function (newPars)
>   ..$ getPars   :function ()
>   ..$ getAllPars:function ()
>   ..$ getEnv    :function ()
>   ..$ trace     :function ()
>   ..$ Rmat      :function ()
>   ..$ predict   :function (newdata = list(), qr = FALSE)
>   ..- attr(*, "class")= chr "nlsModel"
> $ convInfo   :List of 5
>   ..$ isConv     : logi TRUE
>   ..$ finIter    : int 6
>   ..$ finTol     : num 9.87e-06
>   ..$ stopCode   : int 0
>   ..$ stopMessage: chr "converged"
> $ data       : symbol data
> $ call       : language nls(formula = Sobs ~ A * Samples/(1 + (B * Samples)), data = data, start = list(A = 5,      B = 1), algorithm = "default", control = structure(list(maxiter = 50, tol = 1e-05,  ...
> $ dataClasses: Named chr "numeric"
>   ..- attr(*, "names")= chr "Samples"
> $ control    :List of 5
>   ..$ maxiter  : num 50
>   ..$ tol      : num 1e-05
>   ..$ minFactor: num 0.000977
>   ..$ printEval: logi FALSE
>   ..$ warnOnly : logi FALSE
> - attr(*, "class")= chr "nls"
>
>
>
> Como se observa muchos de estos elmentos no son mostrados en el resultado de la funcion a menos que se use la funcion "str"
>
> , quisiera saber como hacer esto, ocultar algunos elementos de una lista producida por una funcion, pero igual tener acceso a esos elementos cuando se le haga el llamado con la funcion "str". Ademas como hace para que el resultado de su funcion salga de esa manera tan ordenada y no como se lo mostraria una lista (ya que el objeto final es una lista)
>
>
>
> Les agradesco de antemano por la ayuda
>
>
>
>
>
>
>
>
>
> Gabriel Antonio Trujillo Paucar
> Estudiante de Biologia
>      997603768
>
>
>
>     [[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]]
>
>
> _______________________________________________
> 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