Hello - I am wanting to create some Cox PH models with coxph (in package survival) using different datasets. The code below illustrates my current approach and problem with completing this. ### BEGIN R SAMPLE CODE ############################## library(survival) #Define a function to make test data makeTestDF <- function(n) { times <- sample(1:200, n, replace = TRUE) event <- rbinom(n, 1, prob = .1) trt <- rep(c("A","B"), each = n/2) testdf <- data.frame(times,event,trt) } #Create two sets of test data of different sizes testdf1 <- makeTestDF(100) testdf2 <- makeTestDF(200) #Define a formula and call coxph form <- Surv(times, event) ~ trt coxph(form, testdf1) #Works coxph(form, testdf2) #Works #Create a list of the two data.frames df.list <- list(testdf1, testdf2) #Try to use mapply mapply(coxph, form, df.list) ### END R SAMPLE CODE ############################### The mapply call generates the following message: Error in terms.default(formula, special, data = data) : no terms component It appears from debugging that the formula argument passed into coxph is simply `~` in this case, with class "name" instead of "formula". Any ideas on how I can get this to work using this approach? Best, Erik Iverson iverson at biostat.wisc.edu > sessionInfo() R version 2.5.1 (2007-06-27) i686-pc-linux-gnu locale: LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C attached base packages: [1] "grid" "grDevices" "datasets" "tcltk" "splines" "graphics" [7] "utils" "stats" "methods" "base" other attached packages: debug mvbutils SPLOTS_1.2-6 reshape SPLOTS_1.3-22 "1.1.0" "1.1.1" "1.2-6" "0.8.0" "1.3-22" Hmisc chron survival "3.4-2" "2.3-13" "2.32"
On Thu, 8 Nov 2007, Erik Iverson wrote:> Hello - > > I am wanting to create some Cox PH models with coxph (in package > survival) using different datasets. > > The code below illustrates my current approach and problem with > completing this. > > ### BEGIN R SAMPLE CODE ############################## > library(survival) > > #Define a function to make test data > makeTestDF <- function(n) { > times <- sample(1:200, n, replace = TRUE) > event <- rbinom(n, 1, prob = .1) > trt <- rep(c("A","B"), each = n/2) > testdf <- data.frame(times,event,trt) > } > > #Create two sets of test data of different sizes > testdf1 <- makeTestDF(100) > testdf2 <- makeTestDF(200) > > #Define a formula and call coxph > form <- Surv(times, event) ~ trt > coxph(form, testdf1) #Works > coxph(form, testdf2) #Works > > #Create a list of the two data.frames > df.list <- list(testdf1, testdf2) > > #Try to use mapply > mapply(coxph, form, df.list) > > ### END R SAMPLE CODE ############################### > > The mapply call generates the following message: > > Error in terms.default(formula, special, data = data) : > no terms component > > It appears from debugging that the formula argument passed into coxph is > simply `~` in this case, with class "name" instead of "formula". >All the arguments to mapply have to be lists or vectors, and they are passed one element at a time, so what you are seeing is the first element of the formula. You can use the MoreArgs argument to pass constant arguments such as form, or you can capture them in a closure mapply(function(data) {coxph(form, data=data)}, df.list) In your case you have only one varying argument, so you could use lapply(df.list, coxph, formula=form) or lapply(df.list, function(df) coxph(form, data=df)) -thomas
Instead of mapply, use lapply (it is more appropriate in this case anyway as you have only one list that you need to iterate over): lapply(df.list, function(x) coxph(form, x)) -Christos> -----Original Message----- > From: r-help-bounces at r-project.org > [mailto:r-help-bounces at r-project.org] On Behalf Of Erik Iverson > Sent: Thursday, November 08, 2007 4:43 PM > To: 'r-help at stat.math.ethz.ch' > Subject: [R] mapply, coxph, and model formula > > Hello - > > I am wanting to create some Cox PH models with coxph (in package > survival) using different datasets. > > The code below illustrates my current approach and problem > with completing this. > > ### BEGIN R SAMPLE CODE ############################## > library(survival) > > #Define a function to make test data > makeTestDF <- function(n) { > times <- sample(1:200, n, replace = TRUE) > event <- rbinom(n, 1, prob = .1) > trt <- rep(c("A","B"), each = n/2) > testdf <- data.frame(times,event,trt) } > > #Create two sets of test data of different sizes > testdf1 <- makeTestDF(100) > testdf2 <- makeTestDF(200) > > #Define a formula and call coxph > form <- Surv(times, event) ~ trt > coxph(form, testdf1) #Works > coxph(form, testdf2) #Works > > #Create a list of the two data.frames > df.list <- list(testdf1, testdf2) > > #Try to use mapply > mapply(coxph, form, df.list) > > ### END R SAMPLE CODE ############################### > > The mapply call generates the following message: > > Error in terms.default(formula, special, data = data) : > no terms component > > It appears from debugging that the formula argument passed > into coxph is simply `~` in this case, with class "name" > instead of "formula". > > Any ideas on how I can get this to work using this approach? > > Best, > Erik Iverson > iverson at biostat.wisc.edu > > > sessionInfo() > R version 2.5.1 (2007-06-27) > i686-pc-linux-gnu > > locale: > LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLA > TE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8 > ;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC > _MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C > > attached base packages: > [1] "grid" "grDevices" "datasets" "tcltk" "splines" > "graphics" > [7] "utils" "stats" "methods" "base" > > other attached packages: > debug mvbutils SPLOTS_1.2-6 reshape SPLOTS_1.3-22 > "1.1.0" "1.1.1" "1.2-6" "0.8.0" "1.3-22" > Hmisc chron survival > "3.4-2" "2.3-13" "2.32" > > ______________________________________________ > 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. > >