2009-09-08 82 views
20

我在幾臺機器上的Windows下使用R。如何讓R將您的工作目錄識別爲其工作目錄?

我知道你可以從R腳本中設置工作目錄,這樣

setwd("C:/Documents and Settings/username/My Documents/x/y/z") 

...但這樣做破壞了腳本的可移植性。這也是惱人的必須扭轉所有的斜槓(因爲Windows給你反斜槓)

有沒有辦法在特定的工作目錄中啓動R,以便您不需要在腳本級別執行此操作?

回答

14

您應該將R(R.lnk文件)的快捷方式複製到所需文件夾。然後在「屬性」(鼠標右鍵 - >最後一個選項)中刪除第二個選項卡(「快捷方式」?)中的「開始於...」字段中的任何內容。如果你用這個快捷方式啓動R,工作目錄就是那個快捷方式所在的那個。

我沒有英文版的Windows,所以我不確定字段名稱,但它們應該很容易找到。

類似的問題是在R-Windows的常見問題解答:

2.5 How do I run it?

2.10 How can I keep workspaces for different projects in different directories?

2.14 What are HOME and working directories?

在2.14中提到,

工作目錄是目錄從哪裏Rgui或Rterm已啓動,除非在快捷方式屬性的「開始」字段中給出快捷方式時才使用該快捷方式。

3

如果您使用Emacs/ESS,這不是問題。我導航到我的R腳本所在的目錄,將其打開,然後啓動R ESS過程。 R控制檯彈出當前目錄作爲R的工作目錄。

如果你還沒有轉換到Emacs/ESS,我推薦它。 (雖然爲了防止火焰戰爭,我也注意到Vi用戶也有類似的選擇。)

希望有幫助。

6

您可以使用環境變量。這可以與Sys.getenv()Sys.setenv()一起使用。例如:

> Sys.setenv(R_TEST="testit") 
> Sys.getenv("R_TEST") 
    R_TEST 
"testit" 

如果您發送腳本中的變量,你應該能夠從內部訪問它,然後對輸出調用setwd()

+0

不要設置這樣的環境變量之間保留的R會話[]?整個計算機重新啓動怎麼樣? – eykanal 2012-01-13 18:50:17

+0

不,但是如果將它添加到.Rprofile文件中,它會生效。或者,您可以從操作系統獲取系統變量(例如在Windows中,您可以將值存儲在環境變量中)。 – Shane 2012-01-16 20:08:07

5

將工作區保存到所需的目錄,然後您只需從Windows資源管理器打開工作區。

3

只是一個細節:而不是像你說的那樣反轉斜槓,只需添加另一個反斜槓即可。其中兩個「\」的功能與其中一個/的功能相同。這使得它至少更容易一些。

+0

+1 Ehva:這是最簡單的方法,當你工作普通的舊R,並且只想設置你的工作目錄一次。 – PavoDive 2014-11-10 16:33:18

4

我在腳本前放了下面這行代碼,它允許我在我的計算機上工作。

setwd(path.expand("~/path/to/working/directory/")) 

where〜is = to your home directory。

Sys.setenv(HOME = "path")Sys.setenv(R_USER = "path")都可以設置主目錄。在我的情況下,我在幾個窗口框中工作,每個窗口框都有相當不同的目錄結構,但通過正確設置主目錄,我可以在計算機之間同步代碼並讓它們在每個窗口上正常運行,因爲我運行我的R項目有類似的目錄結構。

-1

把R gui的快捷方式放到你想要的目錄中。右鍵單擊並查看快捷方式屬性。刪除「開始」的條目並單擊確定。從這個快捷方式啓動R gui時,默認目錄將成爲您啓動的文件夾。根據需要複製/粘貼此快捷方式。

+0

你和我的答案有什麼區別? – Marek 2010-03-12 14:31:07

1

對於Ubuntu的:
將以下命令加入到.Rprofile文件(通常在你的主目錄):

setwd(Sys.getenv("PWD")) 

現在你的默認工作目錄將是任何目錄,你從推出R上。請記住,您還可以通過將工作區圖像保存爲.RData,無論您打算在何處啓動R(啓動源.Rprofile,然後在cwd中搜索.Rdata),都可以在不同目錄中設置默認工作區。

0

爲了將R的工作目錄一樣,我的工作將R腳本的當前目錄下,我總是用命令getwd()setwd()的組合,這樣的:

path <- getwd() setwd(path)

setwd(getwd())

如果你想了解更多相關信息,請參閱本article

乾杯,