2

我正在寻找一种使用 knitr 在乳胶中重用 r 代码的方法。我有多个 Excel 文档,我想在整个论文中以相同的方式导入、分析和绘图。现在我正在为我拥有的每个 excel 文档制作一个新的 .rnw 文件。这意味着,如果我想更改任何内容,我必须在每个 .rnw 文件中进行更改——这似乎是错误的方法。有没有办法,我可以从父 .rnw 调用一个 .rnw 文件,并为它提供一个 excel 文件名以导入和使用。

4

2 回答 2

1

就在这里。您可以同时使用paramsrender函数来帮助解决这个问题。如果您不熟悉参数,请查看此处的params和此处的render。我为以下示例编写了 iris 和 mtcars 以使其表现出色。在下面的降价中,我调用了块中的 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")
                           )})
于 2018-03-28T13:48:47.620 回答
0

您可以按如下方式使用knitr::knit和使用该参数。envir这是.Rnw文件

% parameterized_reports.Rnw
\documentclass{article}

\begin{document}

<<>>=
foo
@

\end{document}

这是R代码

tmp <- environment()
tmp$foo <- "xyz"
knitr::knit("parameterized_reports.Rnw", envir = tmp, output = "output.tex")
tools::texi2pdf("output.tex")
system('open output.pdf')

结果是

在此处输入图像描述

于 2018-08-02T15:05:16.897 回答