我有一个使用
sapply()
的嵌套函数,我在交互变量和结果变量集上运行。这些函数创建了我然后保存的绘图。建模工作完美,在某些情况下接受由于缺乏数据可用性、因素水平不足等而无法预测特定变量。目前,一旦达到错误,我需要跳过这些无法生成模型的变量,该函数被拖拽,无法生成剩余的图。
我的代码如下所示,适用于
mtcars
数据集:
library(tidyverse)
library(marginaleffects)
outcome_var_list = c("mpg","cyl","wt","hp")
interact_var_list = c("gear","am","wt")
iterate <- sapply(outcome_var_list,function(k){
outcome_var_list = outcome_var_list[outcome_var_list == k]
results = list()
for (r in interact_var_list) {
f = paste(k, "~", r, "*factor(vs)")
m = lm(f, subset(mtcars, carb %in% c(1,2,3,4)))
s = plot_slopes(m, variables = r, condition = "vs", draw = FALSE)
tmp = s[, c("estimate", "conf.low", "conf.high", "vs")]
tmp$outcome = k
tmp$regressor = r
results = c(results, list(tmp))
}
results = do.call("rbind", results)
plot1 = results %>%
mutate(min = min(conf.low), max = max(conf.high)) %>% ggplot(aes(x=factor(vs),
y=estimate,
color = regressor,
ymin=conf.low,
ymax=conf.high)) +
geom_errorbar(position = position_dodge(0.4)) +
geom_point(position = position_dodge(0.4)) +
scale_x_discrete(expand = c(0,0)) +
theme_light() +
ggtitle(label = paste0("Model 1: ",k)) +
theme(plot.title = element_text(hjust = 0.5)) +
labs(y= "Interaction Coefficient", x = "X") +
theme(plot.title = element_textbox_simple(vjust=-1)) +
theme(plot.margin = margin(2,0,0,0, "cm")) +
theme(axis.text.x = element_text(size = 5))
ggsave(plot1,file=paste0("plot_",k,".png"))
})
在此代码中,我将
wt
作为变量包含在 outcome_var_list
中以故意生成错误。 wt
无法预测,因为该变量不能是结果和交互变量。请注意,这不是我原始数据中的错误。如果是这种情况,我可以简单地将其过滤掉,但不幸的是,我的真实数据中的变量组合非常广泛,以至于无法手动过滤。因此,我打算使用通用的东西来捕获函数中的所有错误,并跳到outcome_var_list
中的下一个变量,无论为什么给定的结果变量不起作用。
运行上述代码时,会生成
mpg
和 cyl
的图,但不会生成最后两个图。不应该生成 wt
,因为这是不可能的,但是 hp
可以预测并且应该被接受。
如何跳过产生错误的级别并生成所有剩余的绘图?这些错误仅特定于
outcome_var_list
中的变量,而不是interact_var_list,如果有帮助的话。我在其他地方看到过使用 tryCatch
的建议,但这些都显得非常具体。我可以在此代码中实现通用的错误捕获方法来跳过任何错误吗?