2016-11-21 12 views
4

Я обновился до RStudio 1.0.44, и мне кажется, что knitr :: opts_knit $ set (root.dir = path), где путь - это моя директория не работает по-прежнему. Он выдает сообщение:

The working directory was changed to /... inside a notebook chunk. The working 
directory will be reset when the chunk is finished running. Use the knitr 
root.dir option in the setup chunk to change the the working directory for 
notebook chunks. 

Это сообщение будет отображаться в следующей последовательности. Заметьте, что я еще не вязал rmd. Я просто запускаю команды из него. Установка рабочего каталога непосредственно в командной строке через setwd() возвращает правильный путь в getwd(), но загрузка файла с относительным путем (./...) снова вернет сообщение выше. Точно такой же rmd отлично работает с RStudio 0.99.896. Что мне не хватает?

sessionInfo() 

R version 3.3.0 (2016-05-03) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
>Running under: Windows 7 x64 (build 7601) Service Pack 1 

other attached packages: 
[1] scales_0.4.0  ggplot2_2.1.0 xtable_1.8-2  data.table_1.9.6 
[5] dplyr_0.4.3  knitr_1.15  pander_0.6.0 
+2

У меня такая же проблема. Вы решили?Как? –

+0

привет, не решил, и никто (от @ RStudio) не ответил. см. мой собственный ответ/объяснение ниже. но это не удовлетворительно. – Triamus

+0

, но это фактически означает, что я не могу использовать новый RStudio с моим старым рабочим процессом, так как он не позволил мне изменить рабочий каталог с помощью одной строки с помощью ctrl + r. он вернет правильный каталог через getwd(), но, например, в относительном data.table :: fread ("./ my_file"), он попытается найти файл, в котором rmd хранится не в рабочем каталоге, который я только что изменил. Я не вижу, как люди, разделяющие код и данные в разные рабочие каталоги, теперь могут работать интерактивно в уценке RStudio? – Triamus

ответ

3

Вы можете изменить рабочий каталог с:

```{r "setup", include=FALSE} 
knitr::opts_knit$set(root.dir = getwd()) # with something else than `getwd()` 
``` 

, как описано в нижней части dedicated page в сайте.

Но Restart R and run all chunks (доступный на вкладке «Выполнить» в RStudio) исправил ту же проблему на моей машине.

Помогает ли это?

+0

Я думаю, что проблема исходит из другого направления, а именно нового поведения rmd в случае выполнения одной строки с помощью ctrl + r в блоке кода. см. мой собственный ответ. – Triamus

+1

Кажется, что кусок нужно называть 'setup', это нормально? Путь не изменился, когда я использовал другие имена блоков. –

1

Насколько я вижу, поведение rmd-файлов изменилось в новом rstudio. только выполнение строки в куске через ctrl + r приведет к сообщению, как описано в вопросе OP. скорее комбинация клавиш ctrl + shift + enter приводит к выполнению определенного фрагмента. поэтому кажется, что я не могу запустить одну строку в rmd и записать ее на консоль.

1

Я поместил свой файл Rmd в doc/file.rmd и файл кода R в R/code.r, а файл проекта - текущая папка .. Когда я вязать файл Rmd, knitr::opts_knit$set(root.dir = "..") не работает, но работает seated("..").

Я просто нахожу, что я положил source(R/code.r) в тот же самый первый набор настроек, что и knitr::opts_knit$set(root.dir = ".."). То есть:

```{r "setup", include=FALSE} 
knitr::opts_knit$set(root.dir = "..") 
source(R/code.r) 
``` 

Когда я разбиваю его на два куска, он работает сейчас. То есть:

```{r "setup", include=FALSE} 
knitr::opts_knit$set(root.dir = "..") 
``` 

```{r "source"} 
source(R/code.r) 
``` 

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

+0

Это не совсем моя проблема, но, возможно, это была проблема моего будущего, так что очень хорошо знать! – Triamus

0

Я столкнулся с этим поведением. Исправление заключается в использовании normalizePath():

```{r setup, include=FALSE} 
knitr::opts_knit$set(root.dir = normalizePath("..")) 
``` 

EDIT

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

Вы должны исправить свои сценарии из других кусков. Это устранит проблему.

Это задокументировано here.