如何使用 rlang 动词对函数内的数据进行子集化?

时间:2021-04-12 22:32:22

标签: r rlang

我正在尝试遍历几个图并将它们组合成一个 cowplot::plot_grid。我无法直接将绘图列表提供给 plot_grid 函数,因为我正在自定义绘图以便每行只显示一个 y 轴。

library(tidyverse)
library(sjPlot)
library(rlang)
data(mtcars)
model <- lm(hp ~ cyl + mpg, data = mtcars)
plotlist <- map(c("cyl", "mpg"), function(x) plot_model(model, type = "pred", terms = {{x}}) )
combine_plots <- function(plotlist) {
  plot_grid(plotlist[[1]],   
            plotlist[[2]] + 
              theme(axis.text.y = element_blank(),
                    axis.ticks.y = element_blank(),
                    axis.title.y = element_blank() ))
}
map(plotlist, function(x) combine_plots(enquo(x)))

很遗憾,我收到错误 Error in x[["plot.list"]] : object of type 'symbol' is not subsettable。我认为我使用了错误的准引号动词。我该如何纠正错误?

1 个答案:

答案 0 :(得分:2)

我不太熟悉 sjPlot 的情节布局,但这可以在 patchwork 中完成:

combine_plots <- function(plotlist) {
  patchwork::plot_layout(
    plotlist[[1]] |
    plotlist[[2]] + 
      theme(axis.text.y = element_blank(),
            axis.ticks.y = element_blank(), 
            axis.title.y = element_blank() ))
}

combine_plots(plotlist)

enter image description here

(我保留了不对齐 y 轴的 OP 代码,但您可能希望明确 y 轴,以便两个图对齐,例如 coord_cartesian(ylim = c(0,250))