[R-es] Crear nuevos métodos para funciones genéricas existentes

Antonio José Sáez Castillo ajsaez en ujaen.es
Lun Abr 16 10:09:35 CEST 2012


¡Madre mía! Eso pasa por cambiar los nombres a medio camino. 
Originalmente había llamado a la clase sólo ND. Gracias por la pronta 
respuesta (y de paso, por todo el material adicional que ponéis a 
disposición de la comunidad).

El lunes, 16 de abril de 2012 10:02:16, Carlos J. Gil Bellosta escribió:
>
> Hola, ¿qué tal?
>
> Si el objeto que creas en ND.fit es de la clase NDfit, entonces, tu
> función coef tiene que llamarse coef.NDfit (y no coef.ND).
>
> Un saludo,
>
> Carlos J. Gil Bellosta
> http://www.datanalytics.com
>
>
> El día 16 de abril de 2012 09:56, Antonio José Sáez Castillo
> <ajsaez en ujaen.es> escribió:
>>
>> Perdón por anticipado ante una pregunta sólo achacable a mi ignorancia en
>> programación.
>>
>> Estoy creando un nuevo paquete con una estructura "decente", en vez 
>> de las
>> chapuzas que hacía hasta ahora. Defino una función que ajusta unos 
>> datos a
>> una distribución que podemos llamar ND. La sintaxis de esta función 
>> sería,
>> de forma resumida:
>>
>> ND.fit<-function(x, start, ...){
>> ...
>> structure(list(estimate = res$par, sd = sds, vcov = vc, loglik =
>> -res$value,
>> method = method, convergence = res$convergence, n = n, obs = x,
>> obsName = xName), class = "NDfit")
>> }
>>
>> Ahora quiero crear nuevos métodos asociados a la clase NDfit para las
>> funciones genéricas habituales. Por ejemplo:
>>
>> coef.ND<-function (x, ...)
>> {
>> if (!class(x) == "NDfit") {
>> stop("Object must belong to class ND")
>> }
>> print.default(x$estimate, print.gap = 2, quote = FALSE)
>> invisible(x)
>> }
>>
>> El problema es que al hacerlo así, cuando hago
>>
>> coef.ND(ajuste)
>>
>> siendo "ajuste" un modelo ajustado clase NDfit, me sale bien, pero si 
>> hago
>>
>> coef(ajuste)
>>
>> me devuelve NULL. Lo mismo me pasa con print.ND, en cuyo caso me 
>> devuelve el
>> resultado de la función print.default, o con logLik, donde me devuelve
>>
>> Error en UseMethod("logLik") :
>> no applicable method for 'logLik' applied to an object of class "NDfit"
>>
>> He seguido las instrucciones que algunos de vosotros tenéis en vuestros
>> foros, blogs, etc. Por ejemplo, Carlos J. Gil Bellosta propone en
>> http://www.datanalytics.com/blog/2011/08/04/desarrollo-de-paquetes-con-r-iv-funciones-genericas/
>> el ejemplo que sí funciona siguiente:
>>
>> plot.hola.hola<- function( x ) print( "caracola" )
>> a<- list()
>> class( a )<- "hola.hola"
>> plot( a )
>>
>> Así sí funcione, pero, ¿en qué se diferencia eso de lo que yo intento?
>>
>> Gracias de antemano.
>>
>> --
>> Dr. Antonio José Sáez Castillo
>> Dpto. de Estadística e Investigación Operativa
>> Escuela Politécnica Superior de Linares
>> Universidad de Jaén
>> C/ Alfonso X El Sabio 28, 23700 Linares (Jaén) ESPAÑA
>> Tlf. y FAX +34 953 648578
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
> -- 
> Dr. Antonio José Sáez Castillo
> Dpto. de Estadística e Investigación Operativa
> Escuela Politécnica Superior de Linares
> Universidad de Jaén
> C/ Alfonso X El Sabio 28, 23700 Linares (Jaén) ESPAÑA
> Tlf. y FAX +34 953 648578



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