大型主機Linux系統安裝R及bsub提交R任務
來源:互聯網
上載者:User
linux系統的大型主機上安裝R需要在大型主機上編譯安裝R,大型主機上作業系統是CentOS 5.4。實際上,參考文獻2已經非常詳細地列出了如何在linux作業系統上安裝R。之所要要寫這篇博文,是因為我們現在面臨這樣一個問題
:如果大型主機不能從網路直接下載R,而且大型主機上的R久久不得更新,同時大型主機的管理員不願意更新R?
安裝具體步驟:1 在CRAN上下載最新R版本的原始碼,即檔案以.tar.gz結尾2 解壓檔案 tar -zxvf R-*(“R-*是R的具體版本檔案資訊”)並進入解壓檔案夾3 注意查看“INSTALL”檔案,這個檔案簡要介紹了安裝步驟。之後,configure./configure --prefix=/home/me/R --enable-R-shlib (--enable-R-shlib保證了R package的共用)4 安裝之 make, make install5 因為安裝的R不是在root下,所以需要設定自己登入使用者的PATH和添加R_HOME和R_LIB路徑,設定方法是修改使用者路徑下的.bashrc檔案,"..."省略了安裝檔案路徑=====================================================# add R PATH# Source global definitions if [ -f /etc/bashrc ]; then. /etc/bashrc fi export PATH=/home/.../R/bin:$PATH # R_HOME and R_LIB PATH=${R_HOME}/bin:$PATH export R_HOME=/home/.../R/bin/R export R_LIBS=/home/.../R/lib64/R/library export LD_LIBRARY_PATH=${R_HOME}/lib:${LD_LIBRARY_PATH}======================================================之後,在命令列輸入R,可以進入自己安裝的R,會有警告“WARNING: ignoring environment value of R_HOME”,這個不影響R的正常運行。
離線安裝R package通常我們在安裝R的package時候,是通過串連網路,然後直接使用函數install.packages( )。R會很聰明地將所有包的依賴關係搞定。但是,我們離線本地安裝R的*.tar.gz的package呢?同樣,使用install.packages( )函數,比如install.packages("mypkg.tar.gz", repos = NULL)。但是,需要自己根據“報錯資訊”安裝依賴的包。
命令列執行R CMD 為了能夠在BSUB系統上提交R作業,需要學會使用命令列運行R編寫的指令碼。在linux下可以使用R CMD BATCHd等一系列命令。具體使用方法查看文檔man R; man Rscript 第一種方法:R CMD BATCH [options] infile [outfile]options:預設--restore -- save --no-readline;--help 查看協助資訊;--version 查看R版本;--slave 只列印R指令碼的輸出,而不顯示指令碼具體執行情況;--no-timing 去除輸出文檔結束的已耗用時間輸出。outfile:如果沒有命名,會照搬infile名字+ .Rout其實,R CMD BATCH是 R CMD command [arguments]其中的一種,具體可以查看man R的文檔。問題:knitr是一個什麼角色? 第二種方法:R [options] [< infile] [> outfile]options:--version 查看R版本;--slave 只列印R指令碼的輸出,而不顯示指令碼具體執行情況; --vanilla是 --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ的合體;--args 後面是需要傳遞的參數。
注意:options必須選擇--save,--no-save, --vanilla三個中的一個。比如編輯一個testR2.R檔案如下:===================================================================args <- commandArgs(TRUE) # TRUE should be set to choose the right argumentspaste(c("I", "like", args[1], "and", args[2], "!"), collapse = " ")===================================================================接著運行R --slave --vanilla --args tea coffee<testR2.R >testR.Rout查看輸出結果========================================$ cat testR.Rout[1] "I like tea and coffee !"======================================== 第三種方法:Rscript [--options] [-e expr] file [args]options中預設--slave --no-restore;--version 查看R版本;其他類似第二種方法中的說明。-e expr:可以通過expr輸入R的運算式,比如 -e 'name <- "tea"; source("testR.R")'args:是需要輸入指令碼的參數> file:輸出檔案 可以使用第三種方法,寫成R指令碼,之後放入系統運行。比如R指令碼testR.R:===================================================#! /usr/lib/R/bin/Rscript --vanilla args <- commandArgs(TRUE)# paste(c("I", "like", args[1], "and", args[2], "!"), collapse = " ")print(args)=================================================== 執行R指令碼> chmod +x testR.R> ./testR.R tea coffee > testR.Rout 轉自:http://blog.sina.com.cn/s/blog_61f013b80100yhef.html