Как извлечь информацию о формуле и подмножестве из вызова функции

В своей текущей работе я часто использую функцию Survfit () для вычисления оценки Каплана-Мейера для данных о выживаемости и выполняю тест логарифмического ранга с помощью функции Survdiff ().

Я хотел бы знать, как я могу извлечь информацию о формуле и подмножестве из вызова Surfit () и ввести ее непосредственно в Survdiff (). Я обычно использую

survdiff(formula(survfit.object)) 

но это не распознает аргумент подмножества, предоставленный в моем вызове Surffit.

Например:

library(survival)

fail.time <- 12*rexp(100)
group <- factor(sample(1:3,100,replace=TRUE),1:3,c('a','b','c'))
fail.status <- rbinom(100,1,0.4)

srv<-survfit(Surv(fail.time,fail.status)~group,subset=group!="a")
survdiff(formula(srv))

это не то, что я хочу, скорее, я бы хотел

survdiff(formula(srv),subset=group!="a")

но я надеюсь найти метод, который позволит мне больше не добавлять информацию о подмножестве.

Спасибо!


person Steve Reno    schedule 31.03.2014    source источник


Ответы (1)


Большинство объектов подгонки модели в R хранят весь вызов:

survdiff(formula(srv),subset = srv$call$subset)

или просто:

eval(srv$call)

который полностью перезапускает исходный вызов.

person joran    schedule 31.03.2014
comment
Ваше subset = srv $ call $ subset мне кажется ясным, но не могли бы вы уточнить комментарий eval (srv $ call)? Я не могу воспроизвести результаты Survdiff (формула (srv), subset = group! = A) с помощью eval (). Однако вы поднимаетесь на лодку за помощью! - person Steve Reno; 31.03.2014
comment
@SteveReno Не совсем уверен, с чем вы столкнулись. Когда я бегу all.equal(srv,eval(srv$call)), я получаю TRUE. - person joran; 31.03.2014
comment
правильно, eval (srv $ call) вернет те же значения, что и вызов Survfit (), но я заинтересован в использовании Survdiff () в вызове srv $. Я не понимаю, как я могу использовать eval (), чтобы получить те же результаты, что и Survdiff (формула (srv), subset = srv $ call $ subset), например - person Steve Reno; 31.03.2014
comment
@SteveReno Я только указал на использование eval, потому что в вашем конкретном примере вы буквально копировали исходный вызов. Если вы хотите использовать только части исходного вызова, вам нужно извлечь нужные части. - person joran; 31.03.2014
comment
понял, я истолковал ваш ответ, так как могу просто использовать eval () вместо первого полученного ответа. Еще раз спасибо! - person Steve Reno; 31.03.2014