通过 RMarkdown 文档传递参数?
Passing parameters through an RMarkdown document?
我希望为给定的供应商列表创建 unique/individual 报告。理想的输出格式是给定供应商信息的单独 html 文件。
问题是我无法集中精力在 RMarkdown 中创建参数化报告。我一直在看这个 link 以了解如何 loop/iterate 通过 RMarkdown 报告
为了说明和分享我要执行的逻辑如下:
for (vendor in vendor.name) {
rmarkdown::render('input.Rmd', params = list(vendor = vendor))
}
然后我打印出:
Vendor-1.html, Vendor-2.html, …, Vendor-4.html, and vendor-4.html
然后将其保存在我的本地计算机上。我一直在思考的部分是说我们有一个按月计算的销售条形图,传递整个文档的参数如何知道何时更改供应商编号以获得唯一视图。
如果有人可以分享 iris、mtcars 或 RI 中的任何基础数据集的示例,我将非常感激。看看这个 workflow/logic 是如何工作的,因为我正在努力理解这个概念。
具体来说,假设我这里有这段代码。如果我不在块中调用 params$vendor 函数,它怎么会知道循环遍历另一个供应商。在我的过滤器上的 dplyr 动词中,我应该做 MVNDR_NBR == qc_sales$vendor_number 还是 params$vendor?这是我最困惑的一段
sales_2021_stock <- qc_sales %>%
filter(FSCL_YR == 2021
, STR_NBR != '8119'
, MAPPED_ORD_SRC == 'QC'
, so_flg == 0
, YTLW_TY_LY_FLG == 'TY'
, MVNDR_NBR == '60031167'
, !SUB_DEPT_NBR %in% c('0025','0028')) %>%
group_by(MVNDR_NBR, MVNDR_NM, FSCL_WK_NBR, FSCL_YR) %>%
summarise(Sales = sum(ESVS_NET_SLS)) %>%
mutate(FSCL_YR = as.character(FSCL_YR)) %>%
collect()
sales_2020_stock <- qc_sales %>%
filter(FSCL_YR == 2020
, STR_NBR != '8119'
, MAPPED_ORD_SRC == 'QC'
, YTLW_TY_LY_FLG == 'LY'
, so_flg == 0
, MVNDR_NBR == '60031167'
, !SUB_DEPT_NBR %in% c('0025','0028')) %>%
group_by(MVNDR_NBR, MVNDR_NM, FSCL_WK_NBR, FSCL_YR) %>%
summarise(Sales = sum(ESVS_NET_SLS)) %>%
mutate(FSCL_YR = as.character(FSCL_YR)) %>%
collect()
sales_comp_line_stock <- rbind(sales_2021_stock, sales_2020_stock)
stock_comp <- ggplot(sales_comp_line_stock, aes(x = FSCL_WK_NBR, y = Sales, color = FSCL_YR ))+
geom_line(size = 1.25, aes(color = FSCL_YR))+
geom_smooth(size = .50, aes(color = FSCL_YR), se = FALSE, method = "auto")+
scale_x_continuous(breaks=seq(0,weeks,1))+
scale_y_continuous(labels = scales::dollar_format(scale = .0001, suffix = "K"))+
scale_color_manual(values=c("#0298F9", "#F96302"))+
theme_economist()+
ggtitle('Week-Over-Week Sales (Stock) 2021 v 2020')+
theme(
panel.grid.major = element_line(linetype = "dotted"),
axis.text = element_text( size = 10),
legend.position = c(0, 1),legend.justification = c(0, 1),
plot.title = element_text( size = 14, margin=margin(0,0,20,0), hjust = 0.5),
panel.background = element_rect(fill = NA),
strip.text = element_text(size=10)
)
stock_comp
我的数据集如下所示,这些是我的参数中包含的相同供应商,我如何创建一个 ggplot 来显示打印到单个 html 输出中的月度销售?:
理想情况下,一个情节应该这样写:
ggplot(sample_vendor_tbl, aes(x = FSCL_MTH_NM, y = Sales)) +
geom_col()
要在文档中打印出多个 ggplot,我会执行以下操作:
for (i in vendor_nbr){
ggplot(mydata, aes(x = Month, y = sales))+
geom_col()
}
当我们需要考虑参数时,我只是在这里感到困惑。我如何为给定供应商的打印输出创建一个图,类似于您的答案中发布的示例。我基本上想完全按照您在图表中的回答做,但利用 ggplot 而不是 base R
要使用参数创建 ggplot,我必须将 params$mvndr_nbr 引入我的 dplyr 动词,如下所示:
sample_vendor_tbl %>%
filter(MVNDR_NBR == params$MVNDR_NBR) %>%
ggplot(aes(x = FSCL_MTH_NM, y = Sales)) +
geom_col()
我认为您缺少的步骤是指定输出文件名,以便每个“供应商”都有自己的文件;否则,每次都会覆盖相同的文件名,只剩下一个 HTML 文档。
一个例子:
---
title: mtcars cyl
author: r2evans
params:
cyl: null
---
We have chosen to plot a histogram of `mtcars` where `$cyl` is equal to `r params$cyl`:
```{r}
dat <- subset(mtcars, cyl == params$cyl)
if (nrow(dat) > 0) {
hist(dat$disp)
}
```
通过以下方式调用:
for (cy in c(4,6,8)) {
rmarkdown::render("~/Whosebug/10466439/67525642.Rmd",
output_file = sprintf("cyl_%s.html", cy),
params = list(cyl = cy))
}
将呈现三个 HTML 文件,cyl_4.html
、cyl_6.html
和 cyl_8.html
,每个文件具有不同的内容:
我希望为给定的供应商列表创建 unique/individual 报告。理想的输出格式是给定供应商信息的单独 html 文件。
问题是我无法集中精力在 RMarkdown 中创建参数化报告。我一直在看这个 link 以了解如何 loop/iterate 通过 RMarkdown 报告
为了说明和分享我要执行的逻辑如下:
for (vendor in vendor.name) {
rmarkdown::render('input.Rmd', params = list(vendor = vendor))
}
然后我打印出:
Vendor-1.html, Vendor-2.html, …, Vendor-4.html, and vendor-4.html
然后将其保存在我的本地计算机上。我一直在思考的部分是说我们有一个按月计算的销售条形图,传递整个文档的参数如何知道何时更改供应商编号以获得唯一视图。
如果有人可以分享 iris、mtcars 或 RI 中的任何基础数据集的示例,我将非常感激。看看这个 workflow/logic 是如何工作的,因为我正在努力理解这个概念。
具体来说,假设我这里有这段代码。如果我不在块中调用 params$vendor 函数,它怎么会知道循环遍历另一个供应商。在我的过滤器上的 dplyr 动词中,我应该做 MVNDR_NBR == qc_sales$vendor_number 还是 params$vendor?这是我最困惑的一段
sales_2021_stock <- qc_sales %>%
filter(FSCL_YR == 2021
, STR_NBR != '8119'
, MAPPED_ORD_SRC == 'QC'
, so_flg == 0
, YTLW_TY_LY_FLG == 'TY'
, MVNDR_NBR == '60031167'
, !SUB_DEPT_NBR %in% c('0025','0028')) %>%
group_by(MVNDR_NBR, MVNDR_NM, FSCL_WK_NBR, FSCL_YR) %>%
summarise(Sales = sum(ESVS_NET_SLS)) %>%
mutate(FSCL_YR = as.character(FSCL_YR)) %>%
collect()
sales_2020_stock <- qc_sales %>%
filter(FSCL_YR == 2020
, STR_NBR != '8119'
, MAPPED_ORD_SRC == 'QC'
, YTLW_TY_LY_FLG == 'LY'
, so_flg == 0
, MVNDR_NBR == '60031167'
, !SUB_DEPT_NBR %in% c('0025','0028')) %>%
group_by(MVNDR_NBR, MVNDR_NM, FSCL_WK_NBR, FSCL_YR) %>%
summarise(Sales = sum(ESVS_NET_SLS)) %>%
mutate(FSCL_YR = as.character(FSCL_YR)) %>%
collect()
sales_comp_line_stock <- rbind(sales_2021_stock, sales_2020_stock)
stock_comp <- ggplot(sales_comp_line_stock, aes(x = FSCL_WK_NBR, y = Sales, color = FSCL_YR ))+
geom_line(size = 1.25, aes(color = FSCL_YR))+
geom_smooth(size = .50, aes(color = FSCL_YR), se = FALSE, method = "auto")+
scale_x_continuous(breaks=seq(0,weeks,1))+
scale_y_continuous(labels = scales::dollar_format(scale = .0001, suffix = "K"))+
scale_color_manual(values=c("#0298F9", "#F96302"))+
theme_economist()+
ggtitle('Week-Over-Week Sales (Stock) 2021 v 2020')+
theme(
panel.grid.major = element_line(linetype = "dotted"),
axis.text = element_text( size = 10),
legend.position = c(0, 1),legend.justification = c(0, 1),
plot.title = element_text( size = 14, margin=margin(0,0,20,0), hjust = 0.5),
panel.background = element_rect(fill = NA),
strip.text = element_text(size=10)
)
stock_comp
我的数据集如下所示,这些是我的参数中包含的相同供应商,我如何创建一个 ggplot 来显示打印到单个 html 输出中的月度销售?:
理想情况下,一个情节应该这样写:
ggplot(sample_vendor_tbl, aes(x = FSCL_MTH_NM, y = Sales)) +
geom_col()
要在文档中打印出多个 ggplot,我会执行以下操作:
for (i in vendor_nbr){
ggplot(mydata, aes(x = Month, y = sales))+
geom_col()
}
当我们需要考虑参数时,我只是在这里感到困惑。我如何为给定供应商的打印输出创建一个图,类似于您的答案中发布的示例。我基本上想完全按照您在图表中的回答做,但利用 ggplot 而不是 base R
要使用参数创建 ggplot,我必须将 params$mvndr_nbr 引入我的 dplyr 动词,如下所示:
sample_vendor_tbl %>%
filter(MVNDR_NBR == params$MVNDR_NBR) %>%
ggplot(aes(x = FSCL_MTH_NM, y = Sales)) +
geom_col()
我认为您缺少的步骤是指定输出文件名,以便每个“供应商”都有自己的文件;否则,每次都会覆盖相同的文件名,只剩下一个 HTML 文档。
一个例子:
---
title: mtcars cyl
author: r2evans
params:
cyl: null
---
We have chosen to plot a histogram of `mtcars` where `$cyl` is equal to `r params$cyl`:
```{r}
dat <- subset(mtcars, cyl == params$cyl)
if (nrow(dat) > 0) {
hist(dat$disp)
}
```
通过以下方式调用:
for (cy in c(4,6,8)) {
rmarkdown::render("~/Whosebug/10466439/67525642.Rmd",
output_file = sprintf("cyl_%s.html", cy),
params = list(cyl = cy))
}
将呈现三个 HTML 文件,cyl_4.html
、cyl_6.html
和 cyl_8.html
,每个文件具有不同的内容: