使用 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')
在我的常规 .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')