Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用facet_wrap_paginate是否有比循环更快的方法?_R_Loops_Ggplot2_Vectorization_Facet Wrap - Fatal编程技术网

在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
)。但我不确定这是否更快,你可以试试