Cro*_*ops 4 r knitr r-markdown
我想从R包中提取示例代码并rmarkdown自动在文件中运行它.
我能够使用utils::example如下函数提取代码.
example("geom_histogram", package = "ggplot2", ask = F,
prompt.prefix = "", give.lines = TRUE)[-(1:5)]
Run Code Online (Sandbox Code Playgroud)
我尝试使用results="asis"如下的块选项,但结果是作为代码输出而不是代码块.
```{r,echo = FALSE, results="asis"}
cat("```{r}")
library(ggplot2)
cat(paste(example("geom_histogram", package = "ggplot2", ask = F,
prompt.prefix = "", give.lines = TRUE)[-(1:5)], collapse = "\n"))
cat("```")
```
Run Code Online (Sandbox Code Playgroud)
我想将代码作为代码块,输出与http://ggplot2.tidyverse.org/reference/geom_histogram.html中的相同.怎么做到这一点?
更新的答案:
您可以创建一个函数来提取代码并将其用作code块选项中的参数.
# Function saved in functions.R file
getCode <- function(myFunction, myPackage) {
example(myFunction, myPackage, ask = FALSE, character.only = TRUE,
prompt.prefix = "", give.lines = TRUE)[-(1:5)]
}
Run Code Online (Sandbox Code Playgroud)
你的Rmd(myFile.Rmd)应该是这样的:
Run Code Online (Sandbox Code Playgroud)```{r, meta, include = FALSE} myPackage <- "ggplot2" myFunction <- "geom_histogram" source("functions.R") ``` ```{r, intro, echo = FALSE, results = "asis"} cat("#", myPackage, "\n") cat("##", myFunction, "\n") library(myPackage, character.only = TRUE) ``` ```{r, runCode, code = getCode(myFunction, myPackage)} ```
编织Rmd:knitr::knit2html("myFile.Rmd")对于这样的结果:
上一个答案:
将提取的代码写入虚拟文件(foo.R)并将其用作code块选项中的参数.
示例文件(myFile.Rmd):
Run Code Online (Sandbox Code Playgroud)```{r, meta, include = FALSE} library(ggplot2) ``` ```{r, getCode, include = FALSE} code <- example("geom_histogram", package = "ggplot2", ask = FALSE, prompt.prefix = "", give.lines = TRUE)[-(1:5)] write.table(code, "foo.R", quote = FALSE, row.names = FALSE, col.names = FALSE) ``` ```{r, runCode, code = readLines("foo.R")} ```
用这样knitr::knit2html("myFile.Rmd")的结果编织文件:
我们还可以删除硬编码变量以获得更灵活的输出:
Run Code Online (Sandbox Code Playgroud)```{r, meta, include = FALSE} myPackage <- "ggplot2" myFunction <- "geom_histogram" library(myPackage, character.only = TRUE) ``` ```{r, getCode, include = FALSE} code <- example(myFunction, myPackage, ask = FALSE, character.only = TRUE, prompt.prefix = "", give.lines = TRUE)[-(1:5)] write.table(code, "foo.R", quote = FALSE, row.names = FALSE, col.names = FALSE) ``` ```{r, intro, echo = FALSE, results = "asis"} cat("#", myPackage, "\n") cat("##", myFunction, "\n") ``` ```{r, runCode, code = readLines("foo.R")} ```