以编程方式导入和操作 R 脚本/转换 .R 到 .rmd



我有一个R脚本,我想从不同的R脚本中导入,操作它的内容(搜索和替换(并使用不同的扩展名(.rmd(保存。

这就是示例的方式。R 文件在操作之前会看起来:

# A title
# chunkstart
plot(1,1)
# chunkend

这就是例子。rmd它将负责操作:将 "# chunkstart" 和 "# chunkend" 分别替换为 ''{r} 和 '''。

# A title
```{r}
plot(1,1)
```

我一直在寻找方法来做到这一点,但到目前为止还没有找到。有什么想法吗?

我相信您可以使用代码行更少的正则表达式来做到这一点。 但是,它应该可以解决您的问题。

library(magrittr)
readLines('example.R') %>% 
stringr::str_replace("# chunkstart", "```{r}") %>% 
stringr::str_replace("# chunkend", "```") %>% 
writeLines("example.Rmd")

使用以下代码行,您将能够在/path_to_some_directory中的每个.R文件中应用此"操作"

lapply(list.files('/path_to_some_directory', pattern = ".R$", 
full.names = TRUE), function(data) {
readLines(data) %>% 
stringr::str_replace("# chunkstart", "```{r}") %>% 
stringr::str_replace("# chunkend", "```") %>% 
writeLines(paste0(data, "md"))
})

希望对您有所帮助!

我认为?knitr::spin是这个问题的相关答案(特别是提出想法(,或者至少是一个有用的选择。 您必须稍微重新格式化输入,但好处是一种内置的、更丰富、更通用的方式来处理块选项和格式。

下面是带注释的 R 脚本的外观(使用 spin 的默认正则表达式(,

#' ## A title
#' first chunk
#- fig.width=10
plot(1,1)
# some text
#' another chunk
plot(2,2)

输出 Rmd 读取,

## A title
first chunk
```{r fig.width=10}
plot(1,1)
# some text
```
another chunk
```{r }
plot(2,2)
```

最新更新