Исправление уведомления о вызове, напечатанного после функции lm () в R - PullRequest
1 голос
/ 05 ноября 2019

Я использую lm() подобную функцию, называемую robu() из библиотеки robumeta в моей собственной функции foo.

Однако я манипулирую аргументом formula таким образом, чтобы при его отсутствии формула по умолчанию была бы: formula(dint~1) или любая другая формула, определяемая пользователем.

Работает нормально,однако в выводе foo вызов формулы для печати всегда равен: Model: missing(f) if formula(dint ~ 1) независимо от того, какая формула введена в foo.

Можно ли исправить эту часть вывода, чтобы она отображала толькоточная формула используется? ( см. Примеры ниже )

dat <- data.frame(dint = 1:9, SD = 1:9*.1, 
                  time = c(1,1,2,3,4,3,2,4,1), 
                  study.name = rep(c("bob", "jim", "jon"), 3))

library(robumeta)

 # MY FUNCTION:
 foo <- function(f, data){ 

  robu(formula = if(missing(f)) formula(dint~1) else formula(f), data = data, studynum = study.name, var = SD^2)
}

# EXAMPLES OF USE:

foo(data = dat)                       ## HERE I expect: `Model: dint ~ 1` 
foo(dint~as.factor(time), data = dat) ## HERE I expect: `Model: dint ~ time` 

1 Ответ

3 голосов
/ 05 ноября 2019

Один из вариантов - обновить объект 'ml'

foo <- function(f, data){ 
    fmla <- if(missing(f)) {
               formula(dint ~ 1)
          } else {
             formula(f)
           }


   model <- robu(formula = fmla, data = data, studynum = study.name, var = SD^2)
   model$ml <- fmla
   model
}

-checking

foo(data = dat)
RVE: Correlated Effects Model with Small-Sample Corrections 

Model: dint ~ 1 

Number of studies = 3 
Number of outcomes = 9 (min = 3 , mean = 3 , median = 3 , max = 3 )
Rho = 0.8 
I.sq = 96.83379 
Tau.sq = 9.985899 

               Estimate StdErr t-value dfs P(|t|>) 95% CI.L 95% CI.U Sig
1 X.Intercept.     4.99  0.577    8.65   2  0.0131     2.51     7.48  **
---
Signif. codes: < .01 *** < .05 ** < .10 *
---
Note: If df < 4, do not trust the results

foo(dint~ as.factor(time), data = dat)
RVE: Correlated Effects Model with Small-Sample Corrections 

Model: dint ~ as.factor(time) 

Number of studies = 3 
Number of outcomes = 9 (min = 3 , mean = 3 , median = 3 , max = 3 )
Rho = 0.8 
I.sq = 97.24601 
Tau.sq = 11.60119 

                   Estimate StdErr t-value  dfs P(|t|>) 95% CI.L 95% CI.U Sig
1     X.Intercept.     3.98   2.50   1.588 2.00   0.253    -6.80     14.8    
2 as.factor.time.2     1.04   4.41   0.236 1.47   0.842   -26.27     28.3    
3 as.factor.time.3     1.01   1.64   0.620 1.47   0.617    -9.10     11.1    
4 as.factor.time.4     2.52   2.50   1.007 2.00   0.420    -8.26     13.3    
---
Signif. codes: < .01 *** < .05 ** < .10 *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...