[R] How does one pass arguments to a function, such as coxph, that itself is inside a function?

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Mon Dec 16 19:45:34 CET 2019


Hello,

You can assemble the formula with deparse/substitute and paste.
This is the example 2 from ?coxph. I have changed list(...) to 
data.frame(...)


doit <- function(s1, s2, data){
   s1 <- deparse(substitute(s1))
   s2 <- deparse(substitute(s2))
   fmla <- paste("Surv(", s1, ",", s2, ", event)")
   fmla <- paste(fmla, "x", sep = "~")

   coxph(as.formula(fmla), data = data)
}

doit(start, stop, test2)


It works.

Hope this helps,

Rui Barradas

Às 18:12 de 16/12/19, Sorkin, John escreveu:
> Question summary: How does one pass arguments to a function, such as coxph, that itself is inside a function.
> 
> I am trying to write a function that will allow me to call coxph using different outcome and time variables. The coxph works when the coxph is NOT contained in a larger function (which passes the outcome and time variable to  use), but does not work when coxph is contained in a  larger funciton.
> 
> My code:
> 
> fit0 <- coxph(Surv(FUtime,Death)~Age_in_years_at_A1_max+factor(Diabetes)+factor(CKD_stage)+
>                                                         factor(Phase1_first),data=mydata)
> summary(fit0)
> 
> this works:
> 
> Call:
> coxph(formula = Surv(FUtime, Death) ~ Age_in_years_at_A1_max +
>                              factor(Diabetes) + factor(CKD_stage) + factor(Phase1_first),
>      data = mydata)
> 
>    n= 350, number of events= 56
> 
>                             coef exp(coef) se(coef)      z Pr(>|z|)
> Age_in_years_at_A1_max  0.04618   1.04727  0.01384  3.338 0.000845 ***
> factor(Diabetes)1       0.12247   1.13029  0.28282  0.433 0.664991
> factor(CKD_stage)3     -0.28418   0.75263  0.38744 -0.733 0.463261
> factor(CKD_stage)4      0.33938   1.40407  0.36583  0.928 0.353572
> factor(CKD_stage)5      0.97121   2.64115  0.40171  2.418 0.015618 *
> factor(Phase1_first)1   0.02204   1.02229  0.29713  0.074 0.940868
> 
> other output deleted.
> 
> But this code does not work:
> 
> doit <- function(time,outcome,data){
>    fit0 <-
> coxph(Surv(time,outcome)~Age_in_years_at_A1_max+factor(Diabetes)+factor(CKD_stage)+factor(Phase1_first),data=data)
>    print(summary(fit0))
> }
> doit(FUtime,Death,mydata)
> 
>   Error in Surv(time, outcome) : object 'FUtime' not found
> 
> I am certain I have a scoping problem, but I don't know how to solve it.
> 
> John David Sorkin M.D., Ph.D.
> 
> Professor of Medicine
> 
> Chief, Biostatistics and Informatics
> 
> University of Maryland School of Medicine Division of Gerontology and Geriatric Medicine
> 
> Baltimore VA Medical Center
> 
> 10 North Greene Street
> 
> GRECC (BT/18/GR)
> 
> Baltimore, MD 21201-1524
> 
> (Phone) 410-605-7119
> 
> (Fax) 410-605-7913 (Please call phone number above prior to faxing)
> 
> 
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>



More information about the R-help mailing list