Подтвердить что ты не робот

Глобальная среда

Я не могу заставить R markdown/knitr видеть/использовать объекты в моей глобальной среде в R.

Из того, что я прочитал, knitr должен использовать стандартную глобальную среду, но каждый из моих объектов, которые я включаю в кусок кода, возвращает ошибку

## Error: object 'XXX' not found

Я пропустил что-то действительно простое здесь?
Нужно ли сначала вручную загружать объекты из глобальной среды?

Заранее спасибо

Марти

4b9b3361

Ответ 1

Если вы уже сохранили объект в файле, то один чистый подход для целей уценки выглядит следующим образом:

if(file.exists("rfModel.Rda")){
  load("rfModel.Rda")} else {
modFit <- train(class~.,method="rf",data=train)
}

Это эффективно обходит длительное время построения модели, только строя ее, если она еще не существует как объект, так что она сохраняет воспроизводимость. Это похоже на идею кэша, но более обобщаемо ИМХО.

Ответ 2

Похоже, вы хотите, чтобы один и тот же код работал как с ножом, так и с вашей глобальной средой. Это может быть полезно при создании сложных файлов Rmd, требующих тестирования во время строительства.

Проблема заключается в том, что knitr использует локальную папку при нажатии knit и не ищет домашнюю папку проекта (т.е. ваш Rproj - я предполагаю, что вы используете относительные пути). Поэтому, когда вы запускаете код, он работает только для одного или другого. Подход вокруг этого состоит в том, чтобы написать код в вашем Rmd, используя относительные пути к папке проекта (как и в обычном R script) и перенаправить knitr для использования домашней папки проекта. Для этого вставьте следующий код вверху вашего rmd script.

 ```{r setup, include=FALSE}
    library(knitr)

    dd <- getwd()
    knitr::opts_knit$set(root.dir  = paste0(dd,'/../../'))
    knitr::opts_chunk$set(cache.path = paste0(dd,'/cache/'))
    knitr::opts_chunk$set(fig.path = paste0(dd,'/figures/')) 

    ```

Этот код выполняет следующие действия:

  • сначала найдет текущий каталог для вашего rmd.
  • второй, устанавливает корневой каталог проекта. Я сохраняю файлы в двух папках, поэтому "/../../", это нужно будет скорректировать для вашей структуры папок.
  • В-третьих, вам нужно установить путь к папке кэша вручную, поскольку настройка по умолчанию больше не работает, поэтому кеш не работает.
  • наконец, сделайте то же самое для папки с рисунками, так как снова вам нужно перезаписать по умолчанию.

Счастливое кодирование.