如何在knitr/RMarkdown中展示文件指定代码行?
问题描述
我有一个script.R文件,内容如下:
x <- data.frame( a = 1:10, b = 11:20 ) y <- rnorm(100)
需要在RMarkdown文档的单个代码块中仅展示与x相关的前4行代码。
已尝试的方法
- 使用knitr选项
{r, file = "script.R"}会引入整个文件,不符合需求; {r, code = xfun::read_all("script.R")[1:4]}可截取内容,但会以带行号的R向量形式打印,而非源代码格式;- 以下临时方法可行,但步骤繁琐:
```{r, results="asis"} readLines("script.R")[1:4] |> c("```{r}", content=_, "```") |> paste(collapse = "\n") |> cat()
- 使用`read_chunk`方法可行,但需要两个代码块,不符合单个代码块的要求: ```r ```{r, include=FALSE, cache=FALSE} knitr::read_chunk('script.R', labels="chunk-a", from=1, to=4)
# 简洁解决方案 只需单个代码块,通过`code`参数传入截取的行内容即可: ```r ```{r, code = readLines("script.R")[1:4]}
该方法中,`readLines("script.R")[1:4]`读取文件前4行并返回字符向量,`code`参数会将这个向量直接作为代码内容渲染,完美呈现源代码格式,无需额外处理。 若需兼容更多场景(如特殊编码),也可使用`xfun::read_lines`替代`readLines`: ```r ```{r, code = xfun::read_lines("script.R")[1:4]}
内容的提问来源于stack exchange,提问作者Migwell
相关产品推荐
相关产品推荐

