向下移动工作目录中的文件夹
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("~")
我想直接在 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("~")