我正在寻找一种使用knitr在乳胶中重复使用r代码的方法。我有多个excel文档,我想在整个论文中以相同的方式导入,分析和绘制。现在我正在为我拥有的每个excel文档创建一个新的.rnw文件。这意味着,如果我想更改任何内容,我必须在每个.rnw文件中执行此操作 - 这似乎是错误的方法。有没有办法,我可以从父.rnw调用一个.rnw文件,并为其提供一个excel文件名来导入和使用。
答案 0 :(得分:1)
是的。您可以使用params
和render
功能来帮助解决此问题。如果您不熟悉参数,请在此处查看params,此处查看render。我写了iris和mtcars来擅长以下的例子。在下面的markdown中,我调用了作为excel文件的块中的excel参数,只打印前10行。
---
title: "iris"
output: pdf_document
params:
excel: "G:/iris2.xlsx"
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r cars}
head(xlsx::read.xlsx(params$excel,sheetIndex = 1))
```
现在要更改excel文件,您可以使用lapply
和.R文件中的渲染功能。
#create list of excel files
exldocs <- c("G:/mtcars2.xlsx", "G:/iris2.xlsx")
#call the renders.rmd (above), pass the list of excel files to overwrite the #default param field, output a new pdf (call it whatever you want)
lapply(exldocs, function(x){
rmarkdown::render("G:/renders.Rmd", params = list(excel = x),
output_file =paste0(substr(x,1,nchar(x)-4),"pdf")
)})
答案 1 :(得分:0)