0

我正在尝试为模型报告的函数创建一个包装器;我希望一些美学默认值相同,然后根据需要修改任何其他参数。主要受此答案的启发,我考虑使用省略号如下:

library(sjPlot)

mods <- list(lm(1 ~ 1), lm(1 ~ 1))

my_tab_model <- function(x, ...) {

  defargs <- list(show.aic = TRUE, 
                   prefix.labels = "varname", 
                   rm.terms = "Log(theta)", 
                   p.style = "asterisk", 
                   p.threshold = c(0.1, 0.05, 0.01))

  args <- list(...)

  defargs[names(args)] <- args

  do.call(tab_model, list(x, args, defargs))

  }

my_tab_model(mods, dv.labels = c("One model", "Another model"), 
             title = "mods")

但我收到以下错误:

#> Error: $ operator is invalid for atomic vectors
Traceback:
4. .f(.x[[i]], .y[[i]], ...) 
3. purrr::map2(models, 1:length(models), function(model, i) {
    fam.info <- insight::model_info(model)
    if (insight::is_multivariate(model)) 
        fam.info <- fam.info[[1]] ... 
2. tab_model(args, show.aic = TRUE, prefix.labels = "varname", rm.terms = "Log(theta)", 
    p.style = "asterisk", p.threshold = c(0.1, 0.05, 0.01)) 
1. my_tab_model(mod, dv.labels = c("One model", "Another model"), 
    title = "mods") 

看了一圈后 我还是很困惑我以为我在没有一些解决方法的情况下读到了map不接受省略号的地方;所以我怀疑它可能与tab_model函数本身调用map处理它自己的省略号作为它的第一个参数有关。但是,我找不到该来源,并且此答案未提及任何此类问题;所以我仍然不太确定发生了什么。

为了让我更加困惑,当我在实际数据上运行它时,错误是不同的:

Error in names(models) <- unlist(lapply(match.call(expand.dots = F)$..., : 'names' attribute [74] must be the same length as the vector [4]
3. (function (..., transform, show.intercept = TRUE, show.est = TRUE, show.ci = 0.95, show.ci50 = TRUE, show.se = NULL, show.std = NULL, show.p = TRUE, show.stat = FALSE, show.df = FALSE, show.zeroinf = TRUE, show.r2 = TRUE, show.icc = TRUE, show.re.var = TRUE, show.ngroups = TRUE, ...
2. do.call(tab_model, c(x, args, defargs))
1. my_tab_model(negbin_alliance_mods, dv.labels = party_levels, title = "negbin_alliance_mods without supply")

我可以以这种方式将省略号用于类似tab_modelcase 的函数吗?如果可以,如何使用?

任何指针将不胜感激!

4

0 回答 0