2015-07-03 3 views
11

У меня есть файл Rmd с большим количеством кэшированных фрагментов кода.Как читать кептер/Rmd в интерактивном сеансе?

Теперь я хочу продолжить разработку этого сценария, используя интерактивный сеанс, чтобы поиграть и протестировать различные решения, прежде чем вводить окончательный код в новый фрагмент документа.

С помощью простого сценария R я мог бы просто загрузить его, чтобы получить мою интерактивную сессию наравне с последней строкой скрипта. Однако это приведет к (повторению) выполнения всего кода в интерактивном сеансе.

Я хочу прочитать файл Rmd в интерактивном сеансе, игнорируя часть Markdown &, используя существующий кеш knitr, в идеале без создания какого-либо вывода.

Как я могу это сделать?

PS: Я не ищу какой-либо определенный IDE-способ, чтобы настроить это, но для команды, которую я могу запускать из простой сессии R в любом эмуляторе терминала.

ответ

6

Я думаю что работает library("knitr"); knit("foo.Rmd") в консоли/R сессии это самый простой способ сделать это, хотя он перепишет foo.md, рисунки и т.д .. (слишком занят/ленив, чтобы проверить его на данный момент.)

Возможно, вы могли бы сориться в каталоге cache и напрямую читать кешированные файлы, но это было бы намного более трудным/сложным.

+0

Я действительно хочу избежать повторной записи файла Markdown, так как у меня может быть Makefile в зависимости от этого.Я надеялся на что-то вроде вашего второго предложения, но в автоматическом порядке (я предполагаю, что нужно разбирать Rmd, идентифицировать фрагменты кода, хешировать их, проверять соответствующий кэш, загружать данные, если это возможно, или запускать пропущенный код & plot заявления иначе.Если действительно нет никакой функции, делающей это или что-то подобное, я бы прекрасно писал его, так как я буду использовать его снова и снова. Самое главное, что кеш может зависеть от (также кэшированных) параметров, неизвестных во время прочитав его. – mschilli

+1

@mschilli вы могли бы предоставить/dev/null (или файл, который вам не нужен) параметру 'output'? –

+0

@NickK: Я мог бы и это сработает, если кеш был создан с помощью' Rscript - e 'library ("knitr"), вязать ("foo.Rmd")' ', в первую очередь, он был создан библиотекой Rscript -e ("knitr"), bar <- "X", knit («foo.Rmd») и 'X' неизвестны во время загрузки кеша. Это одна из причин, по которой я хочу использовать кеш: это не только экономит время на не переучитывая все, но также будет содержать в кеше значение, присвоенное 'bar', когда' knit'ing 'foo.Rmd'. – mschilli

5

Я создал функции, которые загружают объекты из кешированных фрагментов в интерактивную сессию R. Функции являются lazyload_cache_dir и lazyload_cache_labels и доступны в qwraps2 версии> 0.2.4

Подробный пример использования этих функций here:

Краткий обзор:

Скажем у вас есть файл report.Rmd

--- 
title: "A Report" 
output: html_document 
--- 

```{r first-chunk, cache = TRUE} 
fit <- lm(mpg ~ wt + hp, data = mtcars) 
x <- pi 
``` 

```{r second-chunk, cache = TRUE} 
fit <- lm(mpg ~ wt + hp + am, data = mtcars) 
xx <- exp(1) 
``` 

После вязания вы попадаете в этот каталог проектов

. 
├── report_cache 
│ └── html 
│  ├── first-chunk_bf368425c25f0c3d95cac85aff007ad1.RData 
│  ├── first-chunk_bf368425c25f0c3d95cac85aff007ad1.rdb 
│  ├── first-chunk_bf368425c25f0c3d95cac85aff007ad1.rdx 
│  ├── __packages 
│  ├── second-chunk_2c7d6b477306be1d4d4ed451f2f1b52a.RData 
│  ├── second-chunk_2c7d6b477306be1d4d4ed451f2f1b52a.rdb 
│  └── second-chunk_2c7d6b477306be1d4d4ed451f2f1b52a.rdx 
├── report.html 
└── report.Rmd 

и вы хотите загрузить объекты с first-chunk.

lazyload_cache_labels("first-chunk", path = "report_cache/html") 
## Lazyloading report_cache/html/first-chunk_bf368425c25f0c3d95cac85aff007ad1 
ls() 
## [1] "fit" "x" 

См the blog post подробной информации о загрузке только весь каталог кэшированных объектов или при загрузке определенных объектов внутри кэшированного фрагмента.

0

Внутренне knitr uses lazyLoad загружать кэшированные результаты, и поэтому вы можете:

lazyLoad('knitr_cache_dir/chunk_2c7d6b477306be1d4d4ed451f2f1b52a') 

Убедитесь, что поставить имя файла без суффикса.

Смежные вопросы