【发布时间】:2020-05-11 14:54:20
【问题描述】:
大家好,感谢您的宝贵时间。
我有一个非常具体的问题。我正在尝试通过一个函数调用以编程方式创建一个包含多个图表和汇总表的 PDF 文档。用户将更改函数中的各种参数,并创建一个新的 PDF 文档。新的 PDF 文件将包含各种自定义图形,这些图形也是通过函数创建的。
例如,用户将调用函数get_markdown_report()。该函数将引用 Rmarkdown 文件reprex.Rmd。然后,此 Rmarkdown 文件将引用函数 get_count(),该函数返回一个汇总表。最终结果将是一个包含汇总表的 PDF 文件,但最终用户可以定义输入数据集以及分组变量来创建汇总表。
我在使用分组变量时遇到了麻烦。下面是一个可重现的示例。
这是get_count() 的函数定义。它接受一个输入数据集和一个分组变量,并返回分组变量的每个值的行数(例如cut 或clarity)。
# Loading packages
library(tidyverse)
# Defining function
get_count <- function(data, group_var) {
# Capturing grouping variable in quosure
group_var <- enquo(group_var)
# Determining count of rows per grouping variable
data %>%
group_by(!! group_var) %>%
summarize(count = n())
}
# Example usage:
# get_count(diamonds, cut)
# get_count(diamonds, clarity)
get_count() 然后在 R markdown 文件中调用以创建 PDF 文档。这里是reprex.Rmd的定义:
[注意:我在下面放了两个反引号,而不是三个,这样.Rmd 结构的格式会更好。]
---
title: "Reprex"
output:
pdf_document:
params:
data: data
group_var: group_var
---
``{r, echo = FALSE, include = FALSE}
## Loading Packages -----------------------------------------------------------
library(tidyverse)
library(rmarkdown)
source("get_count.R")
``
A summary table is printed below:
``{r, echo = FALSE}
group_var <- enquo(params$group_var)
params$data %>%
get_count(!! group_var)
``
最后,这个 Rmarkdown 文件将从函数 get_markdown_report() 中调用。用户可以定义输入数据集和分组变量,将创建一个不同的PDF文件。
# Loading packages
library(rmarkdown)
# Defining function
get_markdown_report <- function(data, group_var) {
# Capturing grouping variable in quosure
group_var <- enquo(group_var)
# Rendering PDF markdown document
render(
input = "reprex.Rmd",
params =
list(
data = data,
group_var = !! group_var
)
)
}
但是,根据我的结构,我会遇到各种错误,所有这些都与group_var 的报价/整洁评估有关。我得到的最常见错误是Error: Quosures can only be unquoted within a quasiquotation context.。
我对整洁的评估和引用有点熟悉,但以前从未使用它们来创建 R Markdown 文档。我认为问题在于我在 get_markdown_report() 或 R Markdown 文件中引用分组变量的方式。
关于如何解决这个问题有什么建议吗?
再次感谢!
【问题讨论】:
标签: r r-markdown tidyeval