在工作目录中向下移动一个文件夹

12

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

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

我接着收到:

setwd("~/subfolder")中出错:无法更改工作目录

我做错了什么?

1个回答

32
符号~并不是你认为的那样,它并不表示“当前目录”,而是指代你的主目录。要表示当前目录需要使用点符号.。因此,你想要的是:
setwd("./subfolder")

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

setwd("subfolder")

路径中使用的符号摘要

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

关于“主目录”的说明

在类Unix操作系统(如Linux、OS X、BSD)中,“主目录”指代由“~”表示的含义很明确。这个符号的意义由操作系统定义。根据不同的操作系统,它通常是/home/<username>(在Linux和BSD中),/Users/<username>(在OS X中),或者一个类似的平台相关变体。请参见此处以获取各种操作系统的定义列表。

但在Windows中情况略有不同,因为该操作系统不将“~”识别为有效路径。R for Windows FAQ解释了expand.path如何解释Windows计算机上的主目录:

家目录设置如下:如果环境变量 R_USER 被设置,则使用其值。否则,如果环境变量 HOME 被设置,则使用其值。在这两个用户可控设置之后,R 尝试找到系统定义的家目录。它首先尝试使用 Windows 的“个人”目录(通常是 C:\Users\username\Documents)。如果失败,如果环境变量 HOMEDRIVE 和 HOMEPATH 都被设置了(通常都会),则值为 ${HOMEDRIVE}${HOMEPATH}。如果所有这些都失败了,则使用当前工作目录。
根据我的经验,在 Windows 上,R 最常将“~”解释为“C:\Users\username\Documents”。您可以使用以下命令查找环境变量的值。
Sys.getenv("R_USER")
Sys.getenv("HOME")
Sys.getenv("HOMEDRIVE")
Sys.getenv("HOMEPATH")

而且,您可以使用命令找出路径"~"的解释方式

normalizePath("~")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接