[R-pkg-devel] import with except(ion)

Göran Broström gor@n@bro@trom @end|ng |rom umu@@e
Mon Nov 2 22:12:28 CET 2020


Just a final observation: This can happen to anybody

-------------------------------------------------
 > lm(weight ~ feed, data = chickwts)

Call:
lm(formula = weight ~ feed, data = chickwts)

Coefficients:
   (Intercept)  feedhorsebean    feedlinseed   feedmeatmeal 
feedsoybean  feedsunflower
       323.583       -163.383       -104.833        -46.674 
-77.155          5.333

 > lm(weight ~ frailty(feed), data = chickwts)
Error in frailty(feed) : could not find function "frailty"

 > library(survival)
 > lm(weight ~ frailty(feed), data = chickwts)

Call:
lm(formula = weight ~ frailty(feed), data = chickwts)

Coefficients:
   (Intercept)  frailty(feed)
       232.165          8.147
-------------------------------------------------------

G,

On 2020-11-02 11:15, Göran Broström wrote:
> Thanks!
> 
> Göran
> 
> On 2020-11-02 11:09, Sebastian Meyer wrote:
>> 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.brostrom using 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 using r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>
>>>
>>>
>>
>> ______________________________________________
>> R-package-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>
> 
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel



More information about the R-package-devel mailing list