No need to reinvent the wheel. Göran, you already use the "specials" feature of terms.formula to find strata():
> specials: which functions in the formula should be marked as special in > the 'terms' object? A character vector or 'NULL'. I think you can do the same for frailty(), for example: > formula <- Surv(time, status) ~ age + frailty(inst) > > Terms <- terms(formula, specials = "frailty") > frailties <- attr(Terms, "specials")$frailty > if (length(frailties)) warning("frailty() is not supported by coxreg") Best regards, Sebastian Am 31.10.20 um 14:30 schrieb Gabor Grothendieck: > coxreg could search for frailty and issue a warning or error if found. This > returns TRUE if frailty is used in the formula argument as a function but > not otherwise. That would allow implementation of a nicer message than > if it were just reported as a missing function. > > find_frailty <- function(e) { > if (is.logical(e)) return(e) > if (length(e) > 1) { > if (identical(e[[1]], as.name("frailty"))) return(TRUE) > for (i in 1:length(e)) if (isTRUE(Recall(e[[i]]))) return(TRUE) > } > FALSE > } > find_frailty(frailty ~ frailty) > ## [1] FALSE > fo <- Surv(time, status) ~ age + frailty(inst) > find_frailty(fo) > ## [1] TRUE > > On Fri, Oct 30, 2020 at 2:46 PM Göran Broström <goran.brost...@umu.se> wrote: >> >> My CRAN package eha depends on the survival package, and that creates >> problems with innocent users: It is about the 'frailty' function >> (mainly). While (after 'library(eha)') >> >> f1 <- coxph(Surv(time, status) ~ age + frailty(inst), data = lung) >> >> produces what you would expect (a frailty survival analysis), the use of >> the coxreg function from eha >> >> f2 <- coxreg(Surv(time, status) ~ age + frailty(inst), data = lung) >> >> produces (almost) nonsense. That's because the survival::frailty >> function essentially returns its input and coxreg is happy with that, >> treats it as an ordinary numeric (or factor) covariate, and nonsense is >> produced, but some users think otherwise. (Maybe it would be better to >> introduce frailty in a separate argument?) >> >> I want to prevent this to happen, but I do not understand how to do it >> in the best way. I tried to move survival from Depends: to Imports: and >> adding import(survival, except = c(frailty, cluster)) to NAMESPACE. This >> had the side effect that a user must qualify the Surv function by >> survival::Surv, not satisfactory (similarly for other popular functions >> in survival). >> >> Another option I thought of was to define my own Surv function as >> Surv <- survival::Surv in my package, but it doesn't feel right. >> It seems to work, though. >> >> As you may understand from this, I am not very familiar with these >> issues. I have used Depends: survival for a long time and been happy >> with that. >> >> Any help on this is highly appreciated. >> >> Göran >> >> ______________________________________________ >> R-package-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-package-devel > > > ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel