在R中使用facet_wrap_paginate是否有比循环更快的方法?
我试图使用在R中使用facet_wrap_paginate是否有比循环更快的方法?,r,loops,ggplot2,vectorization,facet-wrap,R,Loops,Ggplot2,Vectorization,Facet Wrap,我试图使用ggforce包中的facet\u wrap\u paginate()将facet\u wrap()应用到大量如果在一个页面上无法读取的facet。然而,对于我的数据集来说,使用for()循环(如vignette中所述)来创建每个页面的速度非常慢,所以我想知道如何对这个过程进行矢量化?我怀疑的部分问题是,我已经将for()循环嵌套到一个函数中,这样我就可以将它应用到许多场景中,并且我猜每次选择正确的页面显示之前,它都会有效地重建整个绘图。如果我的假设是正确的,是否有一种方法可以代替每次
ggforce
包中的facet\u wrap\u paginate()
将facet\u wrap()
应用到大量如果在一个页面上无法读取的facet。然而,对于我的数据集来说,使用for()
循环(如vignette中所述)来创建每个页面的速度非常慢,所以我想知道如何对这个过程进行矢量化?我怀疑的部分问题是,我已经将for()
循环嵌套到一个函数中,这样我就可以将它应用到许多场景中,并且我猜每次选择正确的页面显示之前,它都会有效地重建整个绘图。如果我的假设是正确的,是否有一种方法可以代替每次重建绘图,只从存储在内存中的绘图中选择页面
library(tidyverse)
library(ggforce)
df <- mtcars
hist_plts <- function(data, var, title_vars, pages, x_low_lim = 0, x_up_lim = 50) {
for (i in 1:pages) {
plot <- data %>%
filter({{ var }} >= x_low_lim, {{ var }} < x_up_lim) %>%
ggplot(
aes(
x = {{ var }}
)
) +
geom_histogram(binwidth = 1) +
labs(
title = paste0("Count of mpg by ", title_vars),
x = "MPG",
y = " Count",
caption = paste0("Page ", i, " of ", pages)
) +
scale_x_continuous() +
facet_wrap_paginate(
~cyl,
scales = "free",
nrow = 1,
ncol = 1,
page = i)
print(plot)
}
}
hist_plts(
data = df,
var = mpg,
title_vars = "Cylinders",
pages = 3)
库(tidyverse)
图书馆(警队)
df%
ggplot(
aes(
x={{var}}
)
) +
几何图形直方图(binwidth=1)+
实验室(
title=paste0(“mpg计数”,title_vars),
x=“MPG”,
y=“计数”,
标题=粘贴0(“第页”,共页)
) +
比例x连续()+
小平面包装(
~cyl,
scales=“free”,
nrow=1,
ncol=1,
第页(i)
打印(绘图)
}
}
历史记录(
数据=df,
var=mpg,
title_vars=“圆柱体”,
页数=3页)
在读取一位并查看(尤其是第70/71行)之后,似乎在每个循环中至少执行了数据处理中的所有步骤和gtable
格式中的大多数步骤,然后选择了给定页面的对应面。但是,实际打印仅在执行这些步骤后进行。我不确定您是否可以以一种简单的方式更改facet\u wrap\u paginate
/FacetWrapPaginate
,谢谢您的评论并指导我访问这些页面。似乎没有一种简单的方法可以改变facet\u wrap\u paginate()
。您是否知道另一种方法(除了facet\u wrap\u paginate()
)可以减少一些计算负担?谢谢,如果您不需要依赖于完整数据集的任何图层,您可以尝试在打印之前分割数据,并仅生成一些面(基本上是手动执行面_wrap _paginate
)。但我不确定这是否更快,你可以试试