向下移动工作目录中的文件夹

Moving down a folder in working directory

我想直接在 R 中向下移动一个文件夹。例如,我有一个 foo/bar 的工作目录,我想移动到 foo/bar/子文件夹:

setwd("/Users/foo/bar")
getwd()
[1] "/Users/foo/bar"
setwd("~/subfolder")

然后我收到:

Error in setwd("~/subfolder"): cannot change working directory

我做错了什么?

符号 ~ 并不像您认为的那样。它并不意味着 "the current directory"。 ~ 指的是您的主目录。

当前目录使用的正确符号是句点.

所以,你想要的是

setwd("./subfolder")

当前的操作系统通常假定如果未提供完整路径,则默认使用相对路径(即相对于当前目录)。因此也可以简单地使用

setwd("subfolder")

路径中使用的符号总结

  • . = 当前目录
  • .. = 当前目录的父目录
  • ~ = 主目录(参见下面关于主目录的注释
  • / 作为第一个字符 = 根目录setwd("/folder")
  • 路径中的
  • / = 路径中目录之间的分隔符。例如。 setwd("/folder/subfolder")
  • \ = 在 Windows 和 DOS 操作系统中 只有 ,反斜杠 \ 等同于 /.如果你在 R 中使用这种格式,你将需要使用双反斜杠 \ 来 'escape' 这个。例如,setwd("C:\folder\subfolder")但是,为了保持平台之间的兼容性,建议即使在 windows 系统上也坚持使用正斜杠 /,因为这将被转换为R.
  • 的正确路径
  • 任何不以上述字符之一开头的路径都被解释为相对于当前目录。

关于 'home' 目录的注释

在Unix派生和类Unix操作系统(如Linux、OsX、BSD)中~引用的home目录的含义是直截了当。 ~的含义由操作系统定义。根据 OS,它通常是 /home/<username>(在 Linux 和 BSD 中)、/Users/<username>(在 OS X 中)或类似的依赖于平台的变体。有关各种操作系统的定义列表,请参阅 here

但在 Windows 中情况略有不同,因为 OS 不将 "~" 识别为有效路径。 Windows 常见问题解答的 R 解释了 expand.path 如何解释 Windows 计算机上的主目录,

The home directory is set as follows: If environment variable R_USER is set, its value is used. Otherwise if environment variable HOME is set, its value is used. After those two user-controllable settings, R tries to find system-defined home directories. It first tries to use the Windows "personal" directory (typically C:\Users\username\Documents). If that fails, if both environment variables HOMEDRIVE and HOMEPATH are set (and they normally are), the value is ${HOMEDRIVE}${HOMEPATH}. If all of these fail, the current working directory is used.

根据我的经验,Windows R 最常将 "~" 解释为 "C:\Users\username\Documents"。您可以使用以下命令找到环境变量的值

Sys.getenv("R_USER")
Sys.getenv("HOME")
Sys.getenv("HOMEDRIVE")
Sys.getenv("HOMEPATH")

并且,您可以使用命令

找出"~"被解释为什么路径
normalizePath("~")