通过 RMarkdown 文档传递参数?

如何解决通过 RMarkdown 文档传递参数?

我希望为给定的供应商列表创建独特的/单独的报告。理想的输出格式是给定供应商信息的单独 html 文件。

问题是我无法在 RMarkdown 中创建参数化报告。我一直在查看此 link 以了解如何循环/迭代 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 或 R 中的任何基础数据集的示例,我将非常感激。看看这个工作流程/逻辑是如何工作的,因为我正在努力理解这个概念。

要指定,假设我在这里有大量代码。如果我不在块中调用 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,YTLW_TY_LY_FLG == 'LY',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,plot.title = element_text( size = 14,margin=margin(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()

enter image description here

要在文档中打印出多个 ggplots,我将执行以下操作:

for (i in vendor_nbr){
  ggplot(mydata,aes(x = Month,y = sales))+
geom_col()
}

当我们需要考虑参数时,我只是在这里感到困惑。我如何为给定的供应商创建一个绘图以进行打印,类似于您的答案中发布的示例。我基本上想完全按照您在图表中所做的回答,但利用 ggplot 而不是基本 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("~/StackOverflow/10466439/67525642.Rmd",output_file = sprintf("cyl_%s.html",cy),params = list(cyl = cy))
}

将呈现三个 HTML 文件,cyl_4.htmlcyl_6.htmlcyl_8.html,每个文件都有不同的内容:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res