> On May 1, 2018, at 6:11 AM, Therneau, Terry M., Ph.D. via R-devel 
> <r-devel@r-project.org> wrote:
> 
> A user sent me an example where coxph fails, and the root of the failure is a 
> case where names(mf) is not equal to the term.labels attribute of the formula 
> -- the latter has an extraneous newline. Here is an example that does not use 
> the survival library.
> 
> # first create a data set with many long names
> n <- 30  # number of rows for the dummy data set
> vname <- vector("character", 26)
> for (i in 1:26) vname[i] <- paste(rep(letters[1:i],2), collapse='')  # long 
> variable names
> 
> tdata <- data.frame(y=1:n, matrix(runif(n*26), nrow=n))
> names(tdata) <- c('y', vname)
> 
> # Use it in a formula
> myform <- paste("y ~ cbind(", paste(vname, collapse=", "), ")")
> mf <- model.frame(formula(myform), data=tdata)
> 
> match(attr(terms(mf), "term.labels"), names(mf))   # gives NA
> 
> ----
> 
> In the user's case the function is ridge(x1, x2, ....) rather than cbind, but 
> the effect is the same.
> Any ideas for a work around?

Maybe add a `yourclass' class to mf and dispatch to a model.frame.yourclass 
method where the width cutoff arg here (around lines 57-58 of 
model.frame.default) is made larger:

varnames <- sapply(vars, function(x) paste(deparse(x, width.cutoff = 500), 
        collapse = " "))[-1L]

??

> 
> Aside: the ridge() function is very simple, it was added as an example to 
> show how a user can add their own penalization to coxph.  I never expected 
> serious use of it.  For this particular user the best answer is to use glmnet 
> instead.   He/she is trying to apply an L2 penalty to a large number of SNP * 
> covariate interactions.
> 
> Terry T.
> 


HTH,

Chuck
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to