使用readOGR的相对路径根据R脚本还是rmarkdown而不同

时间:2018-01-19 16:18:47

标签: r r-markdown rgdal ogr

在我的常规.R脚本中,我使用相对路径来使用rgdal::readOGR读取数据:

library(rgdal)
pts <- readOGR("data/points.gpkg")

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

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

返回以下错误:

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

如果我使用

,则会解决此错误
```{r}
pts <- readOGR("../data/points.gpkg")
```

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

我有两个问题:

1)为什么会这样?

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

2 个答案:

答案 0 :(得分:3)

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

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

还有很多这样的变化。

答案 1 :(得分:2)

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

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