[R] Arbitrary number of covariates in a formula

Bert Gunter gunter.berton at gene.com
Wed Aug 11 20:37:30 CEST 2010


suppose covnames is a vector containing your covariate names (e.g. as
character strings)

Then (warning: untested)

rhs <- paste(covnames, collapse="+")

## makes them into a single string separated by "+"-es and

form <- formula(paste("y", rhs, sep="~"))

## creates your formula.

?substitute can also be useful for this.

-- Bert Gunter
Genentech Nonclinical Biostatistics

On Wed, Aug 11, 2010 at 10:53 AM, Mendolia, Franco <fmendolia at mcw.edu> wrote:
>
> I could do that. However, the function f that I mentioned below is part of a bigger program and is nested inside another function, say function A. In function A I determine the covariates that I want to use and then call my function f. So even if I use a formula as single argument, I would still need to construct the formula with the arbitrary number of covariates which then leads to my original problem.
>
> ________________________________________
> From: Erik Iverson [eriki at ccbr.umn.edu]
> Sent: Wednesday, August 11, 2010 12:00 PM
> To: Mendolia, Franco
> Cc: r-help at r-project.org
> Subject: Re: [R] Arbitrary number of covariates in a formula
>
> Are you for some reason against writing your function to accept a single
> argument, a formula, that you simply pass on to coxph?
>
> Mendolia, Franco wrote:
>> Hello!
>>
>> I have something like this:
>>
>> test1 <- data.frame(intx=c(4,3,1,1,2,2,3),
>>                    status=c(1,1,1,0,1,1,0),
>>                    x1=c(0,2,1,1,1,0,0),
>>                    x2=c(1,1,0,0,2,2,0),
>>                    sex=c(0,0,0,0,1,1,1))
>>
>> and I can easily fit a cox model:
>>
>> library(survival)
>> coxph(Surv(intx,status) ~ x1 + x2 + strata(sex),test1)
>>
>> However, I want to write my own function, fit the model inside this function and then do some further computations.
>>
>> f <- function(time, event, stratum, covar )
>> {
>>
>>   fit <- coxph(Surv(time,event) ~ covar[[1]] + covar[[2]] + strata(stratum))
>>   fit
>>   #... do some other stuff
>> }
>>
>> attach(test1)
>> f(intx, status, sex, list(x1,x2))
>>
>> This works fine when I have exactly two covariates. However, I would like to have something that I can use with an arbitrary number of covariates. More precisely, I need something more general than covar[[1]] + covar[[2]].
>>
>> Any ideas?
>>
>> Thanks,
>> Franco
>> ______________________________________________
>> 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.
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list