Импортировать и манипулировать R-скриптами программно / Конвертировать.R в.Rmd

У меня есть R Скрипт, который я хотел бы импортировать из другого R-скрипта, манипулировать его содержимым (искать и заменять) и сохранять с другим расширением (.rmd).

Вот как будет выглядеть файл example.R перед манипуляциями:

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

и вот как пример. Это будет выглядеть после манипуляций: заменен# chunkstart" а также "# chunkend"с```{r} и `` `соответственно.

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

Я искал методы для этого, но пока не нашел ни одного. Есть идеи?

2 ответа

Решение

Я уверен, что вы можете сделать это с помощью регулярных выражений с меньшим количеством строк кода. Однако это должно решить вашу проблему.

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"))
})

Надеюсь, поможет!

Я думаю ?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)
```
Другие вопросы по тегам