以编程方式导入和操作R脚本/将.R转换为.Rmd

时间:2018-05-03 23:21:06

标签: r r-markdown

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

这是example.R文件在操作之前的样子:

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

这就是 example.Rmd 在操作后的样子:替换了" # chunkstart"和" # chunkend"分别用````{r}和```。

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

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

2 个答案:

答案 0 :(得分:4)

我确信您可以使用 正则表达式 以较少的代码行完成此操作。 但它应该可以解决你的问题。

library(magrittr)

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

使用以下代码行,您可以在.R

中的每个/path_to_some_directory文件中应用此“操作”
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"))
})

希望它有所帮助!

答案 1 :(得分:2)

我认为?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)
```