首页 > 解决方案 > 使用应用函数时如何控制绘图的行/列打印

问题描述

考虑以下数据框:

dat <- data.frame(
  ID = c(1:200),
  var1 = rnorm(200),
  var2 = rnorm(200),
  var3 = rnorm(200),
  var4 = rnorm(200)
)

我们想使用该lapply()函数将ggqqplot函数从ggpubr包应用到列 2:4 dat

library(tidyverse)
library(ggpubr)
vars <- paste0(names(dat[,2:5]))
lapply(vars, FUN=ggqqplot, data=dat)

这很好用,但我们希望并排打印图形(例如,2 行、2 列)。我们如何使用 apply 框架来做到这一点?

标签: riterationapplylapply

解决方案


ggqqplot允许使用参数facet_by(检查?ggqqplot)的构面,因此您所要做的就是将数据转换为构面友好的长格式数据。见下文

dat_melt <- reshape2::melt(dat, measure.vars = vars) # converts data into long-form
ggqqplot(dat_melt, x="value", facet.by = "variable")

编辑:

如果你还想使用apply函数,下面是我能想到的最简单的解决方案

plist <- lapply(vars, FUN = function (x) ggqqplot(dat,x = x))
cowplot::plot_grid(plotlist = plist, ncol = 2)

或管道友好的等价物

lapply(vars, FUN = function (x) ggqqplot(dat,x = x)) %>%
  {cowplot::plot_grid(plotlist=.,ncol = 2)}

推荐阅读