Rmarkdown 不遵循与 R 脚本和控制台命令相同的路径

Rmarkdown does not follow same paths as R script and console commands

在 Rmarkdown 中,我无法读取我可以从控制台和 R 脚本中读取的文件,因为 Rmarkdown 不遵循与我的 R 脚本和控制台命令相同的路径。

这是一个最小的可重现示例:

  1. 创建新项目test.Rproj
  2. 创建一个名为 scripts
  3. 的子目录
  4. 运行 以下 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")
  1. 退出 R,然后重新打开 test.Rproj。
  2. 编织如下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 文件中的反引号已正确指定——我在上面添加了下划线,以便反引号出现在代码块中。)

两个看似相关的问题:

  1. 我可以通过 Rmarkdown 读取 test.csv 文件,如果它在 scripts 子目录中,而不是 data 子目录中.
  2. 当我从控制台或脚本 运行 list.files() 时,我收到顶级目录中的文件列表(即 test.Rproj 位于),包括 datascripts 子目录。当我从 Rmarkdown 运行 list.files() 时,我得到 scripts 子目录中的文件列表。

我该如何解决这个问题?

会话信息:

尝试看起来像这样的东西,因为我不确定你的 `R Markdown 的性质。

test <- readRDS(here::here("data/test_data.rds"))

底线是使用 here 包中的 here 函数。

当您在 RStudio 中编织文档时,默认情况下工作目录设置为 Rmd 文档的当前目录(因此将是“脚本”文件夹)。由于“脚本”文件夹不包含“数据”目录,您会收到该错误。如果您愿意,可以将默认设置更改为使用项目根目录。这是 RStudio 全局选项菜单中的一个选项。

有关详细信息,请参阅 https://bookdown.org/yihui/rmarkdown-cookbook/working-directory.html