从 R 包函数中检索并执行示例代码作为 R-markdown 中的代码块
Retrieve and execute example code from an R package function as a codeblock in R-markdown
我想从 R
包中提取示例代码并自动将其 运行 放入 rmarkdown
文件中。
我可以使用函数 utils::example
提取代码,如下所示。
example("geom_histogram", package = "ggplot2", ask = F,
prompt.prefix = "", give.lines = TRUE)[-(1:5)]
我试过如下使用块选项 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("```")
```
我希望将代码作为代码块,输出与 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)]
}
您的 Rmd
(myFile.Rmd
) 应该如下所示:
```{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
):
- 第一块:加载测试库
- 第二块:提取示例并将其保存到文件
- 第三块:运行提取的代码
```{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")
编织文件,结果如下:
我们还可以删除 hard-coded 个变量以获得更灵活的输出:
```{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")}
```
我想从 R
包中提取示例代码并自动将其 运行 放入 rmarkdown
文件中。
我可以使用函数 utils::example
提取代码,如下所示。
example("geom_histogram", package = "ggplot2", ask = F,
prompt.prefix = "", give.lines = TRUE)[-(1:5)]
我试过如下使用块选项 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("```")
```
我希望将代码作为代码块,输出与 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)]
}
您的 Rmd
(myFile.Rmd
) 应该如下所示:
```{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
):
- 第一块:加载测试库
- 第二块:提取示例并将其保存到文件
- 第三块:运行提取的代码
```{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")
编织文件,结果如下:
我们还可以删除 hard-coded 个变量以获得更灵活的输出:
```{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")} ```