我正在使用Mac。 path.expand
函数是从我想要的工作目录中删除的几个文件夹。例如:
path.expand
( '〜')
[1]“/ Users / my.name”
我想把它改成这样的东西:
path.expand
( '〜')
[1]“/Users/my.name/drive/R/project/sub.folder”
我该如何解决这个问题?
谢谢。
答案 0 :(得分:4)
在所有unix-sen(包括macos)中,代字号是特殊的,它指的是操作系统认为的主目录(通过env var HOME
)。
这有两种类型的答案。可以吗?也许,甚至可以肯定。它应该完成吗?可能会出现意想不到的后果(可能很难排除故障和/或解决方法),很可能不会。
这适用于我的ubuntu盒子:
me@mybox:/some/path$ Rscript -e 'Sys.getenv("HOME")'
[1] "/home/me"
me@mybox:/some/path$ HOME=/tmp/ Rscript -e 'Sys.getenv("HOME")'
[1] "/tmp/"
me@mybox:/some/path$ Rscript -e 'Sys.setenv(HOME="/tmp/");Sys.getenv("HOME")'
[1] "/tmp/"
(这在Windows上显然不起作用...它不是非常unix-y!)
因此,您可以尝试使用以下任一方法覆盖它:
Sys.setenv(HOME = "/Users/my.name/drive/R/project/sub.folder")
或HOME
变量
醇>
这可能会产生意想不到的后果。例如,R查找~/.Rprofile
,git和命令查找~/.gitconfig
等。
我推荐的方法是定义变量并在那里进行更改。如果你使用RStudio,那么它的“Projects”总是可以在正确的目录中启动你。如果没有,您仍然希望这个“特殊目录”可以使用,也许可以将其添加到/Users/username/.Rprofile
(在您的“实际”homedir中)
.specialdir <- "/Users/my.name/drive/R/project/sub.folder"
并且,无论何时需要去那里,都要使用file.expand(.specialdir)
。这样做的一个副作用是,您的任何代码,函数,报告以及使用它的任何内容都将无法再现。
答案 1 :(得分:0)
无需更改HOME目录即可轻松引用文件的方法是使用here
包。这基本上使用启发式方法根据脚本的位置找到正确的工作目录。通常,如果您的工作目录是git存储库,它会查找RStudio项目文件(.rproj
)或.git
文件。它易于使用且对于移动机器或setwd
的意外使用非常鲁棒,甚至忘记将HOME设置在不同的机器/配置文件上。
如果上面的数据文件some_data.csv
存储在/Users/my.name/drive/R/project/sub.folder/some_data.csv
中,其中project
是项目的根文件夹:
here::here()
[1] "/Users/my.name/drive/R/project"
here::here("sub.folder", "some_data.csv")
[1] "/Users/my.name/drive/R/project/sub.folder/some_data.csv"
并且您可以将其用作路径的替代品,如:
data <- read_csv(here::here("sub.folder", "some_data.csv"))