:::

直接執行R腳本:RScript Caller / Running a R Script Directly in Windows: RScript Caller

image

以往要使用R腳本(RScript)的時候,我都是將R腳本用RStudio開啟,再用RStudio執行。但這樣子執行挺麻煩的,也不太直覺。所以我用AutoIT開發了一個直接用指令端呼叫R腳本的exe程式:RScript Caller,方便供Windows使用。這樣我們在檔案總管中直接雙擊R腳本就可以執行R腳本的內容。以下我就來介紹一下怎麼取得RScript Caller、設定與使用吧。


下載 / Download

2018-02-10_222042

2018-02-10_222153

下載後直接解壓縮即可。

image

在這裡面我們主要會用到的是以下兩個檔案:

  • RScript-Caller.exe 主程式,要讓R腳本關聯到主程式
  • config.ini 設定檔,設定R環境的路徑

設定 / Configuration

若要順利使用RScript Caller,我們需要在config.ini中設定好R環境的路徑,然後將R腳本關聯到RScript Caller.exe主程式。

設定檔 / config.ini

image

請先用文字編輯器開啟config.ini。我推薦使用Notepad++來編輯。

image

在這個檔案中,我們唯一要編輯的參數就是rscript_path,請設定好你安裝R環境時正確的環境。一般預設是安裝在「C:\Program Files\R\R-3.4.0\bin\x64\Rscript.exe」,但是紅字的「3.4.0」會隨著你安裝的R環境版本而有所不同。另外藍字的「x64」是64位元的版本,若是32位元的電腦,請使用「i386」。請確認該路徑真的有Rscript.exe檔案,否則RScript Caller無法順利執行喔。

關聯程式 / Associate RScript file with RScript Caller

image

我們用同資料夾底下的example.r來設定R腳本的關聯程式。請在該檔案上按右鍵,進入「開啟檔案」中的「選擇預設程式」。

image

按下右下角的「瀏覽」。

image

選擇「RScript-Caller.exe」,開啟。

image

確認RScript-Caller.exe已經正確選擇了,就可以按下「確定」。

image

接下來就可以看到example.r的執行結果了,如上圖所示,原來example.r是個「Hello, World!」呢!


使用 / Usage

2018-02-10_225004

如果有正確設置的話,那以後只要雙擊副檔名為「r」的R腳本,就會自動呼叫RScript Caller來執行。

讓我們以多組常態分佈資料之差異檢定與事後比較:R的ANOVA與Welch's anova中的R腳本為例子中的Parametric Tests for Comparing Many Non-normal Distribution Groups.R,來看看它執行的過程吧。該腳本還需要搭配ANOVA example - data.csv才能使用,所以也請一併下載吧。

anime

整個執行過程我用ScreenToGIF錄了下來,可以看到執行的過程相當簡單,分析結果就跑出來了。以後用這個來操作R腳本就快多了呢!不過如果你是第一次執行的話,R環境需要安裝大量套件,所以需要先耐心等待喔。


結語 / In closing

有人可能會問:「為什麼不要直接關聯Rscript.exe就好了?」

在RScript Caller中,我還做了些額外的動作:

  • 調整工作目錄為R腳本的所在目錄
  • 在執行完R腳本後,用「pause」暫停,以方便檢視執行結果

最主要的是那個「pause」,不然執行結果會直接關閉,讓人看不到到底執行了什麼。

其實在寫RScript Caller之前,我已經有寫過呼叫Node.js的Node.js Caller。但那時候寫Node.js跟用AutoIT寫Caller的技術都不是很好,以前遇到的一些問題,這次都在RScript Caller中做了改進。

要讓RScript Caller順利運作,除了AutoIT本身要寫得好之外,最重要的是R腳本本身是完整沒有問題的。我原本都在RStudio裡面寫R腳本,沒想到RStudio幫我做了相當多的事情,導致在RScript執行的時候頻頻遭遇錯誤。一些錯誤的解法我放在這裡的留言,都是很細微的錯誤,而且相當難Google詢問,這花了我很多的時間處理。

話說回來,要讓R腳本好用,我想最重要的還是能夠使用檔案選擇GUI介面,讓使用者選擇檔案的file.choose()方法功不可沒。大家寫R腳本的時候,基本上都會把檔案路徑寫死,導致使用者在用它的時候,還要先想想R腳本用到的檔案路徑是什麼,比較麻煩。用了file.choose()之後,就可以讓使用者自行選擇,用起來更為順手。

下一個我想做的是Python Caller,Python裡面相當多好用的函式庫,偶爾我還是會用Python在分析資料。Python似乎也有互動式的檔案選擇GUI介面:tkFileDialog,下次我在改寫Python腳本的時候就來用用看吧。


這篇用RScript Caller執行R腳本的說明就到這邊囉。你平常是怎麼執行R腳本的呢?用指令列?還是用RStudio?如果你有什麼建議的話,歡迎在下面留言提出指教。如果你覺得RScript Caller還不錯用的話,請幫我在AddThis分享工具按讚、將這篇分享到Facebook等社群媒體吧!感謝你的耐心閱讀,讓我們下一篇見。

總共1 則留言, (我要發問)

  1. 我更新了程式,讓執行結果看起來更簡潔一點
    https://lh3.googleusercontent.com/-YSobj7TG4ik/Wn_xe6QEPzI/AAAAAAADprY/rdMncnu18hMndTI9HiJr3O9Xa5ALjEYyQCHMYCw/s0/2018-02-11_153102.jpg

    如果將R腳本關聯到RScript Caller時有問題,請改用Default Program Editor,教學如下:
    http://blog.pulipuli.info/2011/04/default-program-editorwindows7xmind.html

    此外,昨晚也順手把Python Caller完成了XD
    https://github.com/pulipulichen/Python-Caller

    回覆刪除