Ошибка "не удается открыть соединение" при выполнении "knit HTML" в RStudio
Я получаю ошибку ниже при попытке "вязать HTML" в RStudio.
|................................ | 50%
ordinary text without R code
|.................................................................| 100%
processing file: Preview-b0c112a265.Rmd
label: unnamed-chunk-1
Quitting from lines 16-26 (Preview-b0c112a265.Rmd)
Error in file(file, "rt") : cannot open the connection
Calls: <Anonymous> ... withVisible -> eval -> eval -> read.csv -> read.table -> file
Execution halted
Я использую RStudio на 64-битной машине win8.
Ответы
Ответ 1
Когда вы запускаете "Вязать HTML", код пытается найти файл, который вы читаете, в том же каталоге, где .Rmd
находится, потому что knitr
устанавливает рабочий каталог на этот путь. Насколько я вижу, у вас есть два варианта.
- Попробуйте указать абсолютный путь к файлу (не очень надежный, но удобный в некоторых случаях).
- Выделите относительный путь к файлу. Если у вас есть файл
.Rmd
в /
и данные в /data
, относительный путь должен быть, например, read.table("./data/myfile.csv"...)
. .
означает "здесь" (везде, где находится getwd()
), две точки поднимаются вверх по структуре каталогов, а указатели каталоги поднимаются вниз.
Ответ 2
Иногда это раздражает путь выполнения файла Rmd, особенно когда файл rmd не хранится в корневой папке проекта. Я обычно сохраняю rmd в папке Report, чтобы избежать всех временных файлов в корне проекта (например, Report/myreport.Rmd).
Например, в папке ресурсов есть файл myfile.csv. В файле rmd мне нужно использовать две точки для указания пути к файлу:
read.csv('../Resources/myfile.csv')
Но путь к файлу неверен, если я хочу протестировать свой код в консоли проекта Rstudio, поскольку обычный рабочий каталог - это корневая папка проекта. Поэтому мне нужно удалить две точки из пути к файлу:
read.csv('Resources/myfile.csv')
Я написал простую функцию, чтобы решить эту проблему для себя (https://github.com/byzheng/rproject). Функция project_filepath сгенерирует новый путь относительно корневой папки проекта. Таким образом, рабочим каталогом может быть любая подпапка в проекте. Код ниже будет работать для файла и консоли Rmd.
library(rproject)
read.csv(project_filepath('Resources/myfile.csv'))
Ответ 3
Следующее работает для меня - если у вас есть ваш проект (скажем, каталог с именем my_project
), организованный примерно так:
![enter image description here]()
А в папке scripts
вас есть какой-то *.Rmd
(*.rmd
) или скрипт *.R
(*.r
), который вы хотите связать/скомпилировать как отчет HTML (CTRL + SHIFT + K
из RStudio), затем у вас есть варианты:
'''{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = '../')
# Or use multiple '../' if needed;
# One '../' means go one level up towards the root,
# here, moving from 'scripts' folder to the root 'my_project'
'''
или используйте абсолютный путь; хотя это и не рекомендуется, если вы поделитесь своим каталогом/репозиторием с коллегами (в Windows что-то вроде C: /my/absolute/path/to/my_project
не будет работать на любом другом компьютере и также не будет работать на вашем, если вы переместите my_project
)
'''{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = 'absolute/path/to/my_project/')
'''
- 2) Как для сценария
*.R
и для файла *.Rmd
(хотя это не рекомендуется в примечании о помощи knitr::knit
) - вы можете поместить его в начало своего сценария *.R
или в фрагмент кода ваш файл *.Rmd
(где вы читаете некоторые данные) что-то вроде:
setwd(gsub(pattern = '/scripts', replacement = '', x = getwd()))
Если вы запустите/выполните сценарий *.R
без компиляции (скажем, при тестировании сценария), он не изменит обычный getwd()
поскольку не может найти шаблон /scripts
. При компиляции в HTML он будет редактировать путь к рабочей директории, удаляя часть /scripts
из path/to/my_project/scripts
Обе эти опции позволят вам использовать относительные пути, такие как:
read.csv('data/my_data.csv')
избегая чего-то вроде:
read.csv('../data/my_data.csv')
что может быть непросто, если вы хотите проверить свои скрипты перед их компиляцией в отчеты HTML.
Ответ 4
Вам необходимо установить абсолютные пути или относительно вашей папки проекта, как упоминают другие авторы. Вы также можете setwd (путь).
Но этого недостаточно для меня. По какой-то причине я обнаружил, что мне нужно загрузить все мои данные в самый первый блок из R-команд в файле .Rmd, иначе я получаю то же самое как вы.
Другими словами:
```{r}
setwd("/tmp/report")
# This load works
data1 <- read.csv("your_file.csv", sep = "\t")
````
some markdown text here ...
```{r}
# This load does not work, even if I do a setwd just before:
data1 <- read.csv("your_file.csv", sep = "\t")
````
Ответ 5
Для меня это был просто случай, когда я еще не сохранил мой файл .Rmd... Как указывалось выше, код пытается найти файл в том же каталоге, где находится .Rmd, а .Rmd doesn 't существует, вы можете получить эту ошибку.
Ответ 6
С тех пор я не знаю, когда это является частью глобальных опций, но, как я только что наткнулся на это, а это не написано здесь: в глобальных опциях → Markdown, есть настройка: "оценивать порции в каталоге" и когда вы используете "current" или "Project" это сработало по крайней мере для меня (по-видимому, по умолчанию установлено "document")