我正在尝试为模型报告的函数创建一个包装器;我希望一些美学默认值相同,然后根据需要修改任何其他参数。主要受此答案的启发,我考虑使用省略号如下:
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_model
case 的函数吗?如果可以,如何使用?
任何指针将不胜感激!