On Mon, 13 Jul 2009, Heinz Tuechler wrote:

At 20:18 13.07.2009, Charles C. Berry wrote:
On Mon, 13 Jul 2009, Heinz Tuechler wrote:

> Dear All,
> > since years I am struggling with Surv objects in data.frames. The > following seems to have to do with it. > See below the modified example from the help page of survSplit. The > original works, as expected. If, however, a Surv object is added to the > data.frame, each record gets doubled.
> Is there some solution other than avoiding Surv objects in data.frames?

I think you can modify survSplit so that it will properly handle Surv objects.

Change this line:

         newdata <- lapply(data, rep, ntimes + 1)

to this:

         newdata <- lapply(data,
                 function(x) {
                         x <- as.matrix(x)
                         x[rep(1:nrow(x), ntimes + 1),]
                                 })

or something similar that results Surv objects being rep()'ed rowwise rather than elementwise and returned as objects of the right dimension (rather than as a vector).

Caveat: This works in the example you give, but I've not tested this extensively.

HTH,

Chuck



> > Thanks,
> Heinz
> > > require(survival) > > ## from the help page
> aml3<-survSplit(aml,cut=c(5,10,50),end="time",start="start",
>        event="status",episode="i")
> > summary(aml)
> summary(aml3)
> > coxph(Surv(time,status)~x,data=aml)
> ## the same
> coxph(Surv(start,time,status)~x,data=aml3)
> > ## added to show doubling of records
> aml.so <- aml
> aml.so$surv.object <- with(aml, Surv(time, status))
> > aml3.so <- survSplit(aml.so ,cut=c(5,10,50),end="time",start="start",
>                      event="status",episode="i")
> summary(aml3.so)
> > sessionInfo('survival')
> R version 2.9.1 Patched (2009-07-07 r48910)
> i386-pc-mingw32
> > locale:
> 
LC_COLLATE=German_Switzerland.1252;LC_CTYPE=German_Switzerland.1252;LC_MONETARY=German_Switzerland.1252;LC_NUMERIC=C;LC_TIME=German_Switzerland.1252
> > attached base packages:
> character(0)
> > other attached packages:
> [1] survival_2.35-4
> > loaded via a namespace (and not attached):
> [1] base_2.9.1      graphics_2.9.1  grDevices_2.9.1 methods_2.9.1
> [5] splines_2.9.1   stats_2.9.1     utils_2.9.1
> > ______________________________________________
> R-help@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.

Charles C. Berry                            (858) 534-2098
Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu               UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901

Thank you Chuck,

it seems to work also with my real data, but I noted that in the example aml$x, which is a factor, gets converted to character in aml3.so. Maybe, if I find the time, I should look at as.data.frame.matrix and rbind for Surv objects.



Heinz,

Try

    newdata <- lapply(data, function(x) {
        if (!is.matrix(x)) {
                rep(x,ntimes +1 )
        } else {
                x <- as.matrix(x)
                x[rep(1:nrow(x), ntimes + 1),]}})


HTH,

Chuck

Thanks again,
Heinz

______________________________________________
R-help@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.


Charles C. Berry                            (858) 534-2098
                                            Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu               UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901

______________________________________________
R-help@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.

Reply via email to