在rnw / sweave文件中使用knitr重用r代码

时间:2018-03-28 10:43:46

标签: r latex knitr code-reuse rnw

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

2 个答案:

答案 0 :(得分:1)

是的。您可以使用paramsrender功能来帮助解决此问题。如果您不熟悉参数,请在此处查看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)

您可以如下使用xAxis: { labels: { y:-100 //label's y position } }, knitr::knit参数。这是envir文件

.Rnw

这是R代码

% parameterized_reports.Rnw
\documentclass{article}

\begin{document}

<<>>=
foo
@

\end{document}

结果是

enter image description here