[英]How can I get R to follow symbolic links in Windows 10?
我有多个 RStudio 项目,每个项目都在自己的工作目录中。 所有项目都从同一系列的 CSV 文件中提取数据。
我想将 CSV 文件放在单独的“数据”目录中,然后在每个项目目录中放置一个指向数据目录的 Windows 快捷方式。 因此,目录结构将是:
/data
/project-1
/project-1/data = Windows shortcut pointing to /data
/project-2
/project-2/data = Windows shortcut pointing to /data
etc.
但是,当我尝试通过例如 project-1 的快捷方式访问“data”目录时,R 生成以下错误:
> write.csv(df, "data/df.csv")
Error in file(file, ifelse(append, "a", "w")) :
cannot open the connection
In addition: Warning message:
In file(file, ifelse(append, "a", "w")) :
cannot open file 'data/df.csv': No such file or directory
我究竟做错了什么?
我不知道这一点,因为过去 10 年我一直在使用 Linux 而不是 Windows,但是:
在 Windows 中,“快捷方式”不是符号链接。 要创建实际的符号链接,您必须以管理员身份打开命令提示符(!?! - 或激活开发人员模式),然后使用 mklink 创建链接。 RStudio 确实正确地遵循以这种方式创建的符号链接。
遗憾的是,Windows 资源管理器没有正确遵循以这种方式创建的符号链接。 并且您无法创建到目录的硬链接。 所以无论哪种方式,它都只有一半的功能。 血腥的窗户。
我知道这是一个老问题,但从未发布过解决方案。
解决方案:
在 windows 中创建软链接。 为此,请以管理员身份打开命令行。 使用“mklink”命令。 最好的方法是使用两个位置的完整路径。 mklink 是这样工作的:
mklink LinkLocation PathToFile
如果你想做目录使用“D\\”。例如:“mklink D\\ C:/myNewLink F:/LocationOfMyDirectorry
这样的链接应该可以在 R 中正常工作(如常规文件夹/文件)。
好想! 不久前我实际上也有类似的想法:使用 Windows 快捷方式 ( .lnk
s) 可以让人们在没有冗余的情况下引用资源,并无缝指向(或重定向)到各个位置......只需点击几下鼠标在 Windows 文件资源管理器中!
我的搜索发现了两个救生包: fs
(来自tidyverse
)和R.utils
。
现在fs
确实具有与tidyverse
的稳定性和一致性的tidyverse
。 它提供了一个标准化的接口来创建符号链接,它的fs::link_path()
会让你阅读这些链接。
🚨🚨🚨但是,Windows 快捷方式不是符号链接。 🚨🚨🚨
因此,我更喜欢R.utils
包中R.utils::filePath()
强大功能和相关性。 一方面,它实际上可以专门扩展 Windows快捷方式( .lnk
s)。 另一方面,它将让您将目录的快捷方式视为目录:
R.utils::filePath("./project-1/data")
#> "C:/absolute/path/to/data"
R.utils::filePath("./project-1/data/my_data.csv")
#> "C:/absolute/path/to/data/my_data.csv"
实际上,您可以将任意数量的此类快捷方式链接在一起!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.