【问题标题】:"../" relative path directory not working R“../”相对路径目录不起作用 R
【发布时间】:2020-11-28 23:09:46
【问题描述】:

我经常需要处理来自 Dropbox 的共享数据/代码,所有文件通常都以df <- import("../data/branch/file_name.csv") 的形式加载

但是,这永远不会加载到我的计算机上,所以我总是必须在我的完整目录中输入df <- import("C:/Users/Name/Dropbox/Folder1/Folder2/data/branch/file_name.csv")

这使得其他人难以重现代码。有什么办法可以解决这个问题,以便 R 可以正确读取“../”部分?我总是收到这个错误:错误:path 不存在:../data/branch/file_name.csv

(我以导入函数为例,但其他包或加载函数也会出现此问题)

我也尝试过使用“~/”,但问题仍然存在。不过,我使用的共享代码始终使用“../”,所以我更喜欢一个可以让它工作的解决方案,这样我就不必在每次需要使用它时更改原始脚本。

非常感谢。

编辑:尽管有下面的对话,但我仍然遇到了麻烦。我尝试设置工作目录,然后使用“../”,它有时适用于read_xls()(它在几个小时前工作,不再是,尽管做完全相同的事情并设置相同的工作目录)但不适用于rio::import() 或其他阅读功能。我什至尝试将我的工作目录设置为完全相同的文件夹并使用“./”但没有运气。错误现在显示“无法打开连接”或“没有此类文件”

【问题讨论】:

  • 了解您正在使用的非基础软件包会有所帮助。我对imports 的唯一引用是backports::import(与CSV 文件无关)。不幸的是,我一直使用“../”,所以这不是通用的 R 缺点。您是否使用getwd() 验证当前目录?
  • 即使我使用 readxl 等其他软件包也会出现此问题:df <- read_xls("../data/file_name.xls") 我每次都会遇到相同的错误。它只是将“../”读取为错误,因此我必须写出完整目录。
  • 如果您使用的是 RStudio,它具有驻留在特定目录中的“项目”的概念。那不一定是包含 R 脚本文件的目录,事实上我认为这不一定是最好的项目组织。如果一个项目植根于(比如)C:/Users/me/Projects/ABC,那么可能会有R/ 带有脚本,data/ 带有 CSV 和其他数据文件,也许output/ 带有渲染的 PDF。在这种情况下,可以source("R/somecode.R")dat <- read.csv("data/somedata.csv")
  • 我的意图不是让您重复setwd(".."),直到您到达C:/ 目录。这样您就可以清楚地识别 (1) "../data/file_name.xls")相对于 的位置(例如 R 目录或其他),以及 setwd(...)that 目录的位置这样"../data/" 将正确指向您正在引用的目录。 proj org 的一些可能有用的链接:martinctc.github.io/blog/…support.rstudio.com/hc/en-us/articles/200526207-Using-Projects
  • 这不是您问题的答案,而是另一种方法:stackoverflow.com/a/59108817/2554330

标签: r directory path relative-path


【解决方案1】:

您可以先尝试将工作目录(wd)设置为当前文件夹,然后使用 read.csv 导入数据。

  1. 要设置工作目录,首先使用rstudioapi::getActiveDocumentContext()$path获取当前目录,然后使用setwd()设置wd到这个路径。
  2. 然后使用任何函数来导入您的数据。

例如,假设您的 R 代码保存在“分支”文件夹中,那么以下代码应该可以正常工作:

setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
mydata <- read.csv("./file_name.csv")
head(mydata)

否则,如果您的 R 代码保存在 Folder2 下名为 code 的子文件夹中,这样您的 R 脚本目录为:"C:/Users/Name/Dropbox/Folder1/Folder2/code/mycode.R",则以下内容应该有效:

setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
mydata <- read.csv("../data/branch/file_name.csv")
head(mydata)

【讨论】:

    【解决方案2】:

    看起来您正在与之协作的人将他们的工作目录设置为 Folder2 中的一个单独文件夹(可能是一个包含所有 .R 代码的文件夹?)。 .. 表示相对路径是从工作目录开始引用下一个文件夹(下一个文件夹大概是 Folder2)。

    为了解决您的问题,每次开始工作时,您都需要将工作目录设置为您的协作者用于其工作目录的同一文件夹。例如,这可能类似于setwd("C:/Users/Name/Dropbox/Folder1/Folder2/RCode")。不幸的是,您每次打开脚本时都必须这样做,但如果您在一开始就这样做,那么其余代码应该可以工作。

    工作目录可能难以管理,尤其是在协作时。工作目录问题的更好解决方案是在 R Studio 中创建 project 并使用 GitHub 协作处理该项目。如果您没有使用 GitHub 的经验,these videos 是一个可以帮助您入门的平易近人的资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2013-02-19
      • 2015-08-30
      • 2011-03-17
      • 2014-06-25
      • 2018-09-15
      • 1970-01-01
      相关资源
      最近更新 更多