如何设置`path.expand`从我的工作目录开始?

时间:2018-02-20 19:45:36

标签: r path

我正在使用Mac。 path.expand函数是从我想要的工作目录中删除的几个文件夹。例如:

path.expand( '〜')

[1]“/ Users / my.name”

我想把它改成这样的东西:

path.expand( '〜')

[1]“/Users/my.name/drive/R/project/sub.folder”

我该如何解决这个问题?

谢谢。

2 个答案:

答案 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!)

因此,您可以尝试使用以下任一方法覆盖它:

  1. Sys.setenv(HOME = "/Users/my.name/drive/R/project/sub.folder")
  2. 在启动R。
  3. 之前,在工作环境中设置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"))