使用 readOGR 的相对路径因 R 脚本或 rmarkdown 而异

relative paths using readOGR are different depending on whether R script or rmarkdown

在我的常规 .R 脚本中,我使用相对路径通过 rgdal::readOGR:

读取数据
library(rgdal)
pts <- readOGR("data/points.gpkg")

然而,Rmd 文档中 R 片段中的相同代码:

```{r}
pts <- readOGR("data/points.gpkg")
```

returns 出现以下错误:

Error in ogrListLayers(dsn = dsn) : Cannot open data source

如果我使用

,这个错误就解决了
```{r}
pts <- readOGR("../data/points.gpkg")
```

但我不能在常规 .R 脚本中使用该路径字符串。如果我想复制我在 R 脚本中编写的代码以用于 R markdown 文档,这会令人沮丧。

我有两个问题:

1) 为什么会这样?

2) 我如何编写我的路径,以便它们 运行 在 .R 和 .Rmd 文档中

Rmd 文档的默认工作目录是它所在的目录。您有多种选择:

  • 使用完整的文件路径(适合您,但不能移植到其他计算机)
  • 将您的 Rmd 文件放在您用于 R 脚本的工作目录中
  • 将您的 R 脚本与您的 Rmd 文件放在目录中
  • 在你的第一个 Rmd 代码块中设置你的工作目录
  • 编写脚本为文件路径添加前缀,在 R 脚本中将前缀设置为 "./",在 Rmd 中将前缀设置为 "../"(如果你想花哨的话,可以自动检测到这个)
  • 不要复制您的代码:只使用脚本或只使用 Rmd

还有很多类似的变化。

https://github.com/yihui/knitr/issues/277 找到的另一个解决方案是将根目录指定为文档顶部的一个选项:

opts_knit$set(root.dir = 'path/to/directory')