在 R 中编写共享目录的相对路径

Coding a relative path to a shared directory in R

假设我和我的同事有一个共享目录,例如 SharePoint 驱动器。我们到任何给定目录的文件路径,比如 OurProject1 将是相同的,唯一的区别是我们的用户名。

例如我的路径是:"C:/Users/JohnLennon/SharedDrive/SharedData/baseline_data"

而他们的将是:"C:/Users/RingoStarr/SharedDrive/SharedData/baseline_data"

我正在尝试编写一个函数,允许已将共享驱动器映射到 运行 一个脚本的任何同事访问共享数据中的数据,而无需手动输入他们的用户名。请记住,项目目录不是共享驱动器 - 如果我与同事共享此脚本,它将保存在共享目录之外,因此与项目相关的相对文件路径将不起作用。

我一直在尝试使用在从 getwd() 推断目录路径的前半部分的函数中临时设置的绝对文件路径来解决这个问题。所以函数看起来有点像这样:

wd <- getwd() # get the users working dir
usr <- substr(wd, 1, 18) # extract the root down to the username
paste(usr, "SharedDrive/SharedData/baseline_data", sep = "") # prefix this onto the shared directory path

这对 RingoStarr 有效,他的用户名中的字符数与 JohnLennon 相同,但是 GeorgeHarrison 或所有其他用户呢?在第二行计算字符数显然是一种有限的方法。

我正在寻找对第二行的修改,它将从工作目录“盲目”导航,我们假设工作目录是 "C:/Users/Username/" 的子目录,到根目录下两级(即在用户名中目录)。 ".." 在这里不起作用,因为我们不知道用户名目录 getwd() 在哪里。

如果存在问题,我也愿意接受不同的解决方法

而不是 substr,您可以尝试 strsplit,然后使用 collapse 参数尝试 paste

wd_split <- strsplit(wd, "\/")
wd_split
# [[1]]
# [1] "C:"  "Users"  "JohnLennon"  "SharedDrive"  "SharedData" 

usr <- paste(wd_split[[1]][1:3], collapse = "/")
usr
# "C:/Users/JohnLennon"