2016-05-23 25 views
1

我正在嘗試向下移動直接在R中工作的文件夾。例如,我有一個foo/bar的工作目錄,我想移動到foo/bar /子文件夾:向下移動工作目錄中的文件夾

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

然後我得到:在setwd

錯誤( 「〜/子」):不能改變工作目錄

我在做什麼錯?

+1

符號找出路"~"被解釋爲〜沒有做什麼你似乎認爲它確實如此。這並不意味着「當前目錄」。 〜指您的主目錄。 – dww

+1

@dww:這意味着你應該只是做'setwd(「子文件夾」)或者setwd(「./子文件夾」)(單個'.'表示「當前目錄」) –

+0

@dww,發佈爲答案? –

回答

12

符號~不會做你認爲它所做的事情。這並不意味着「當前目錄」。 ~指您的主目錄。

正確的符號使用當前目錄是一段.

所以,你要的是

setwd("./subfolder") 

當前的操作系統通常認爲,如果不提供完整路徑,則相對路徑(即相對於當前目錄)將默認使用。因此,也可以簡單地使用

setwd("subfolder") 

在路徑中使用的符號的概要

  • . =當前目錄
  • ..當前目錄
  • ~ =主目錄=父(請參閱主目錄下面的註釋
  • /作爲第一個字符=根目錄例如setwd("/folder")
  • /在路徑中的目錄之間的路徑=分隔符內。例如。 setwd("/folder/subfolder")
  • \ =在Windows和DOS操作系統只有,反斜槓\相當於/。如果你在R中使用這種格式,你需要使用雙反斜槓\\來'escape'這個。例如,setwd("C:\\folder\\subfolder")但是,爲了保持平臺之間的兼容性,建議在windows系統上堅持使用正斜槓/,因爲這將被R轉換爲正確的路徑。
  • 任何不以一個開頭的路徑上述字符被解釋爲相對於當前目錄。

上「家」目錄

在Unix的衍生和類Unix操作系統(例如Linux,OSX,BSD)home目錄的簡稱的含義解釋性說明通過~是直截了當的。操作系統定義了~的含義。根據操作系統的不同,通常是/home/<username>(在Linux和BSD中),/Users/<username>(在OS X中)或類似的平臺相關變體。有關各種操作系統的定義列表,請參閱here

但是在Windows中,情況稍有不同,因爲操作系統不會將"~"識別爲有效路徑。對於Windows FAQ將R說明如何expand.path解釋主目錄在Windows計算機上正是如此,

主目錄設置如下:如果環境變量R_USER 設置,使用它的值。否則,如果環境變量HOME設置爲 ,則使用其值。在這兩個用戶可控設置之後,R 會嘗試查找系統定義的主目錄。它首先嚐試使用Windows「個人」目錄(通常爲 C:\ Users \ username \ Documents) 。如果失敗,如果兩個環境變量HOMEDRIVE和HOMEPATH都設置爲 (通常是),則 值爲$ {HOMEDRIVE} $ {HOMEPATH}。如果所有這些都失敗,則使用當前的 工作目錄。

根據我的經驗,在Windows上最常見的解釋是"~""C:\Users\username\Documents"。你可以找到環境變量的值用下面的命令

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

而且,您可以通過使用命令

normalizePath("~") 
相關問題