You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Rmarkdown文件中提取代码块的原始文本?

提取Rmarkdown文件中的所有R代码块内容

这里有个实用的方法帮你从readLines读取的Rmarkdown内容(也就是你的foo对象)里提取所有R代码块的内容:

首先,我们先把你给出的示例foo定义好(方便测试):

foo <- c("", "```{r package, include=FALSE}", "library(tidyverse)", "library(lubridate)", "library(kableExtra)", "library(knitr)", "library(sf)", "library(bcmaps)", "```", "", "", "```{r}", "", "## A dataframe ", "pct_flow <- HIST_FLOW %>%", " group_by(year_day, STATION_NUMBER) %>%", " mutate(prctile = ecdf(Value)(Value))", "```")

接下来用这段代码提取代码块:

# 定位所有R代码块的起始行(匹配````{r`开头的行)
start_indices <- grep("^```\\{r", foo)

# 为每个起始行找到对应的代码块结束行(第一个` ``` `行)
end_indices <- sapply(start_indices, function(start) {
  # 从起始行的下一行开始查找结束标记
  end_pos <- grep("^```$", foo[(start + 1):length(foo)])[1]
  start + end_pos
})

# 提取每个代码块内的内容(起始行+1到结束行-1)并合并
extracted_code <- unlist(mapply(function(start, end) {
  foo[(start + 1):(end - 1)]
}, start_indices, end_indices))

# 查看提取结果
print(extracted_code)

代码解释:

  • grep("^```\\{r", foo):通过正则匹配找到所有R代码块的起始行索引,注意这里需要转义大括号{,所以用\\{
  • sapply(start_indices, ...):遍历每个起始行,从下一行开始寻找第一个代码块结束标记```,计算出对应的结束行索引
  • mapply(...):逐个提取每个代码块之间的内容,最后用unlist把所有代码行合并成一个单一向量

运行这段代码后,你会得到所有R代码块里的原始文本行,包括注释和代码。

内容的提问来源于stack exchange,提问作者boshek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:59:19