問題 你正在編寫一個(gè)命令腳本,如UNIX或OS X系統(tǒng)的shell腳本,或Windows系統(tǒng)中的批處理腳本,并且你希望在這些腳本中執(zhí)行R代碼。 解決方案 使用帶有CMD BATCH子命令的方式運(yùn)行R程序,并給出腳本文件名和輸出文件名: 如果需要將輸出結(jié)果發(fā)送到標(biāo)準(zhǔn)輸出設(shè)備中,或者希望將命令行參數(shù)傳遞到腳本中,可以考慮應(yīng)用Rscript命令: 討論 R是一個(gè)交互式軟件,它提示用戶輸入,然后顯示輸出結(jié)果。有時(shí)你想在批處理模式下運(yùn)行R,從腳本讀取命令。這對(duì)于shell內(nèi)部的腳本,例如含有統(tǒng)計(jì)分析的腳本而言特別有用。 CMD BATCH子命令把R轉(zhuǎn)到批處理模式,它讀取腳本文件scriptfile并且把輸出寫入輸出文件outputfile。這個(gè)運(yùn)行過程中不與用戶交互。 你可能會(huì)根據(jù)具體情況使用命令行選項(xiàng),調(diào)整R的批處理過程。例如,使用--quiet選項(xiàng)來避免啟動(dòng)信息,否則將使輸出信息混亂: 下面是一些其他批處理模式下的實(shí)用命令: 類似于--quiet,它禁止回送輸入的信息,使R軟件輸出的信息更為簡(jiǎn)潔。 在R啟動(dòng)時(shí)不還原工作空間。對(duì)于希望以空白工作空間啟動(dòng)R的腳本而言,這個(gè)選項(xiàng)很有必要。 在退出R時(shí),不保存工作空間;否則,R會(huì)保存當(dāng)前工作空間并覆蓋原有工作目錄中的.RData文件。 不讀取.Rprofile文件或者~/. Rprofile文件。 在腳本運(yùn)行結(jié)束后,CMD BATCH子命令一般會(huì)使用proc.time函數(shù)顯示其執(zhí)行的時(shí)間。如果你不需要顯示該時(shí)間,可以在代碼最后一行調(diào)用參數(shù)為runLast=FALSE的q函數(shù),它將防止調(diào)用proc.time函數(shù)。 CMD BATCH子命令有兩個(gè)限制條件:輸出必須總是傳送到一個(gè)文件中,并且無法簡(jiǎn)單地將命令行參數(shù)傳送到腳本中。如果這兩個(gè)限制成為問題,可以考慮使用R軟件自帶的Rscript程序。Rscript命令的第一個(gè)命令行參數(shù)是腳本文件的名稱,其余的參數(shù)將傳遞給腳本代碼: 在腳本中,命令行參數(shù)可以通過調(diào)用commandArgs函數(shù)來獲取,該函數(shù)會(huì)把參數(shù)作為一個(gè)字符串向量返回: Rscript程序和CMD BATCH命令使用上面所提到的相同的命令行選項(xiàng)。 將輸出結(jié)果輸出到標(biāo)準(zhǔn)輸出設(shè)備中,該設(shè)備是R從調(diào)用它的shell腳本中繼承來的。當(dāng)然,可以通過一般的重定向方法將輸出重定向到一個(gè)文件中: 下面是一個(gè)名為arith.R的簡(jiǎn)易R(shí)腳本文件,它對(duì)兩個(gè)命令行參數(shù)進(jìn)行四個(gè)算術(shù)運(yùn)算: 腳本以下面的形式調(diào)用: 產(chǎn)生如下結(jié)果: 在Linux或UNIX系統(tǒng)中,你可以在腳本的開頭添加#!后跟隨Rscript程序的路徑,這樣腳本就是完全自我包含的了(即代碼變得完全獨(dú)立于外部)。假定Rscript程序安裝在/usr/bin/Rscript目錄中,你可以在arith.R腳本文件中添加下面一行,使其成為自我包含代碼: 在提示符處,我們把腳本文件標(biāo)記為可執(zhí)行文件: 此時(shí)我們可以不用Rscript前綴而直接調(diào)用腳本代碼: 另請(qǐng)參閱 有關(guān)R中運(yùn)行腳本文件的詳情,參見方法3.12。 |
|