[R] How to modify a S4 function (in the package NADA)

Martin Morgan mtmorgan at fhcrc.org
Thu Nov 15 15:32:54 CET 2012


On 11/15/2012 06:10 AM, Sarah Goslee wrote:
> Hi,
>
> Your reproducible example isn't reproducible for me, as I get an error message.
>
> But regardless, the easiest thing to do is write your own wrapper,
> something like:
>
> mycenfit <- function(x, y) {
>    result <- cenfit(x, y)
>    c(result, sum = result$n * result$mean)
> }
>
> No need to change anything in the package itself. Incidentally, using
> attach() is generally a really bad idea. with() is much safer.
>
> Sarah
>
> On Thu, Nov 15, 2012 at 7:00 AM, maxbre <mbressan at arpa.veneto.it> wrote:
>> I want to get access to the code of an S4 method in order to possibly modify
>> a function to accomplish my particular needs: in my case the function in is
>> cenfit() from the package NADA
>>
>> Now, given my reproducible example:
>>
>> my.ex<-structure(list(TEC = c(0.21, 0.077, 0.06, 0.033, 0.014, 0.0072), LR =
>> c(0L, 0L, 1L, 0L, 1L, 0L)), .Names = c("TEC", "LR"), class = "data.frame",
>> row.names = c(NA, -6L))
>>
>> and the following few lines of code:
>>
>> library(“NADA)
>>
>> attach(my.ex)
>>
>> cenfit(TEC,LR)
>>
>> giving this output:
>>
>>    n      n.cen         median       mean      sd
>> 6.00     2.00              0.033           0.058       0.083

actually, cenfit() returns an object

 > xx = cenfit(my.ex$TEC, as.logical(my.ex$LR))

and what you're seeing is the result of the object's 'show' method

 > xx
          n      n.cen     median       mean         sd
6.00000000 2.00000000 0.03300000 0.05836667 0.08350178

You can see the body of the show method with

     selectMethod(show, class(xx))

and methods that are available to work on xx with

     showMethods(class=class(xx), where=search())

Sarah is right that you'd likely want to write your own function, using a 
combination of available methods, e.g.,

censtats <- function(x) {
     s = summary(x)
     c(n = nrow(s), n.cen = nrow(s) - sum(s$n.event), median = median(x),
       mean = mean(x)[["mean"]], sd = sd(x))
}

Martin

>>
>> I would like to add one more result to the above, namely “sum”, very simply
>> computed as the product of “n” times “mean”
>>
>> Do you think that is possible or convenient?
>>
>> I’ve been reading that editing a S4 methods needs particular attention as by
>> using showMethods("cenfit") and then getMethod("cenfit"); in fact, I’ve been
>> trying that but without much success (i.e. understanding of the cumbersome
>> output)
>>
>> can anyone give me some help on how is probably better to proceed in order
>> to get my new result?
>>
>> different alternative solutions or hints or advices are also more than
>> welcomed
>> (I’m pretty new on R and specially on the field of function handling and
>> customizing)
>>
>> all the best
>>
>> max
>>
>>
>>
>
>
>
> --
> Sarah Goslee
> http://www.functionaldiversity.org
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>


-- 
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793




More information about the R-help mailing list