[R] How to access results of survival analysis

Heinz Tuechler tuechler at gmx.at
Mon May 8 10:43:18 CEST 2006


At 12:55 07.05.2006 +0100, Prof Brian Ripley wrote:
>On Sun, 7 May 2006, Heinz Tuechler wrote:
>
>> Hello Xiaochun Li!
>>
>> Thank you for submitting the function. At the time I had that problem I
>> solved it in a somewhat different way.
>> I changed a few lines in the print.survfit method. I introduced a parameter
>> "ret.res=FALSE" set to false to preserve the normal behaviour of print.
>> The second last line "invisible(x)" I changed to:
>>
>> if (ret.res)
>> 	invisible(list(x,x1))
>> else
>> 	invisible(x)
>>
>> So print.survfit returned the results. Of course, Your method has the
>> advantage to work as long as the output structure of print.survfit does not
>> change. At the end I would prefer the original function to be changed and
>> when I find the time I will submit a worked proposal to Thomas Lumley, the
>> maintainer of the survival package. In that way it would be available also
>> in future versions of survival.
>
>But all print() methods are required to return their first argument 
>unchanged, so
>
>foo
>print(foo)
>
>do the same thing.  See ?print.
>
>-- 
>Brian D. Ripley,                  ripley at stats.ox.ac.uk
>Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
>University of Oxford,             Tel:  +44 1865 272861 (self)
>1 South Parks Road,                     +44 1865 272866 (PA)
>Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>

I see that my proposal is against the rules.
So what would be a correct solution? Using the (expanded) example from
Xiaochun Li, you see that print(fit1) does not _simply_ print its first
argument, but calculates the median and its confidence interval. 
What would be the correct way to access these values?

# example:

library(survival)

fit1 <- survfit(Surv(time, status) ~ 1, data=aml)
print(fit1)

Call: survfit(formula = Surv(time, status) ~ 1, data = aml)

      n  events  median 0.95LCL 0.95UCL 
     23      18      27      18      45 
> 

smed <- function(x) {
        ox <- capture.output(print(x))
        n <- length(ox)
        tmp <- t(sapply(ox[4:n],          
                function(l) strsplit(l, split=' +')[[1]]))
        nres <- strsplit(ox[3],split=' +')[[1]][2:6]
        res <- matrix(as.numeric(tmp[,2:6]), ncol=5,
                dimnames=list(tmp[,1], nres))
        res
}

sf1 <- smed(fit1)
sf1

Lacking experience in R-programming, my personal opinion is that
calculations like the median and the confidence interval should not be only
side effects of a print command but accessible result objects of a
corresponding function.

Heinz Tüchler




More information about the R-help mailing list