Rmarkdown 不遵循与 R 脚本和控制台命令相同的路径
Rmarkdown does not follow same paths as R script and console commands
在 Rmarkdown 中,我无法读取我可以从控制台和 R 脚本中读取的文件,因为 Rmarkdown 不遵循与我的 R 脚本和控制台命令相同的路径。
这是一个最小的可重现示例:
- 创建新项目test.Rproj
- 创建一个名为 scripts
的子目录
- 运行 以下 R 脚本 scripts/test.R:
test <- as.data.frame(c(1, 2, 3))
dir.create("data")
write.csv(test, "data/test.csv")
rm(test)
test <- read.csv("data/test.csv")
- 退出 R,然后重新打开 test.Rproj。
- 编织如下Rmarkdown文档(scripts/test.Rmd):
---
title: "test"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
_```
```{r read-data}
test <- read.csv("data/test.csv")
_```
产生以下错误:从第 12-13 行退出 (test.Rmd)
文件错误(文件,“rt”):无法打开连接
调用:... withVisible -> eval -> eval -> read.csv -> read.table -> file
执行暂停
(请注意,.Rmd 文件中的反引号已正确指定——我在上面添加了下划线,以便反引号出现在代码块中。)
两个看似相关的问题:
- 我可以通过 Rmarkdown 读取 test.csv 文件,如果它在 scripts 子目录中,而不是 data 子目录中.
- 当我从控制台或脚本 运行
list.files()
时,我收到顶级目录中的文件列表(即 test.Rproj 位于),包括 data 和 scripts 子目录。当我从 Rmarkdown 运行 list.files()
时,我得到 scripts 子目录中的文件列表。
我该如何解决这个问题?
会话信息:
- R 版本 4.1.0 (2021-05-18)
- RStudio 版本 1.4.1717
- 平台:x86_64-apple-darwin17.0(64 位)
- 运行宁下:macOS Big Sur 11.5.1
尝试看起来像这样的东西,因为我不确定你的 `R Markdown 的性质。
test <- readRDS(here::here("data/test_data.rds"))
底线是使用 here
包中的 here
函数。
当您在 RStudio 中编织文档时,默认情况下工作目录设置为 Rmd 文档的当前目录(因此将是“脚本”文件夹)。由于“脚本”文件夹不包含“数据”目录,您会收到该错误。如果您愿意,可以将默认设置更改为使用项目根目录。这是 RStudio 全局选项菜单中的一个选项。
有关详细信息,请参阅 https://bookdown.org/yihui/rmarkdown-cookbook/working-directory.html
在 Rmarkdown 中,我无法读取我可以从控制台和 R 脚本中读取的文件,因为 Rmarkdown 不遵循与我的 R 脚本和控制台命令相同的路径。
这是一个最小的可重现示例:
- 创建新项目test.Rproj
- 创建一个名为 scripts 的子目录
- 运行 以下 R 脚本 scripts/test.R:
test <- as.data.frame(c(1, 2, 3))
dir.create("data")
write.csv(test, "data/test.csv")
rm(test)
test <- read.csv("data/test.csv")
- 退出 R,然后重新打开 test.Rproj。
- 编织如下Rmarkdown文档(scripts/test.Rmd):
---
title: "test"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
_```
```{r read-data}
test <- read.csv("data/test.csv")
_```
产生以下错误:从第 12-13 行退出 (test.Rmd) 文件错误(文件,“rt”):无法打开连接 调用:... withVisible -> eval -> eval -> read.csv -> read.table -> file 执行暂停
(请注意,.Rmd 文件中的反引号已正确指定——我在上面添加了下划线,以便反引号出现在代码块中。)
两个看似相关的问题:
- 我可以通过 Rmarkdown 读取 test.csv 文件,如果它在 scripts 子目录中,而不是 data 子目录中.
- 当我从控制台或脚本 运行
list.files()
时,我收到顶级目录中的文件列表(即 test.Rproj 位于),包括 data 和 scripts 子目录。当我从 Rmarkdown 运行list.files()
时,我得到 scripts 子目录中的文件列表。
我该如何解决这个问题?
会话信息:
- R 版本 4.1.0 (2021-05-18)
- RStudio 版本 1.4.1717
- 平台:x86_64-apple-darwin17.0(64 位)
- 运行宁下:macOS Big Sur 11.5.1
尝试看起来像这样的东西,因为我不确定你的 `R Markdown 的性质。
test <- readRDS(here::here("data/test_data.rds"))
底线是使用 here
包中的 here
函数。
当您在 RStudio 中编织文档时,默认情况下工作目录设置为 Rmd 文档的当前目录(因此将是“脚本”文件夹)。由于“脚本”文件夹不包含“数据”目录,您会收到该错误。如果您愿意,可以将默认设置更改为使用项目根目录。这是 RStudio 全局选项菜单中的一个选项。
有关详细信息,请参阅 https://bookdown.org/yihui/rmarkdown-cookbook/working-directory.html