R語言-啟動項相關文件配置


(2017-07-08 銀河統計)

前言

你是否希望通過改變配置選項或預加載R包,來客戶化R進程,進而更加方便的使用R進行數據分析和挖掘。下文將詳細介紹R啟動項相關文件的配置,方便大家查找和使用。

目錄

 1. R語言的啟動

 2. R語言自定義啟動環境


1. R語言的啟動

下面簡單介紹R啟動時的一系列過程(使用help(Startup)命令查看詳細信息),R啟動順序如下:

  • 1.R執行Rprofile.site中的腳本。這個腳本文件是系統級的腳本,它允許系統管理員對默認選項進行自定義修改。該代碼文件的完整路徑為R_HOME/etc/Rprofile.site。(如果,R發行版中不包含Rprofile.site文件,系統管理員可以根據需要自行建立該文件。)

R_Home主目錄中的配置文件夾etc
配置文件夾etc中的相關文件

  • 2.R執行工作目錄中的.Rprofile腳本文件;若該文件不存在,則執行用戶主目錄中的.Rprofile文件。在這一步用戶可根據自己的需要來對R進行客戶化。用戶主目錄中的.Rprofile文件用於全局性的客戶化。當R在低級別的目錄啟動時,這個低級別目錄下的.Rprofile腳本文件也可以對在本目錄下啟動的R進行客戶化。例如,對啟動於某個項目目錄下的R進行客戶化。

  • 3.如果當前工作目錄中有.RData文件,那么R將載入該.RData文件中保存的工作空間。R在退出時會將工作空間保存到一個名為.Rdata的文件中。它將從該文件中載入你的工作空間,並恢復訪問原來的局部變量和函數。

  • 4.在R中所有的默認輸入輸出文件都會在工作目錄中。getwd() 報告工作目錄,setwd() 負責設置工作目錄。在win窗口下也可以點擊Change Working Directory來更改。

  • 5.如果你定義過.First函數, R將執行該函數。.First函數是用戶或項目定義啟動初始化代碼的好地方,你可以在.Rprofile文件或工作空間中來對該函數進行定義。

  • 6.R執行.First.sys函數。這一步會載入默認的R包,該函數是R的內部函數,一般用戶或管理員不需要對其修改。

  • 7.Sys.getenv('R_HOME') 會報告R主程序安裝目錄

  • 8.?Startup可以得到更多關於R啟動時的幫助

注意,R直到最后一步執行.First.sys函數時才會載入默認R包。在這之前只有基礎R包會載入。這一點很重要,因為它意味着之前幾步不能假定除基礎R包以外的軟件包會載入。這也是為什么在.Rprofile腳本文件中試圖打開繪圖窗口時會出錯:因為繪圖R包還未載入。

2. R語言自定義啟動環境

自定義啟動詳解1

打開R安裝位置里的etc文件夾中的配置文件Rprofile.site文件:

這個文件里,設置的內容包括默認編輯器,CRAN鏡像選取,自動加載包等等。如果你想要將常用的package和function在啟動的時候讓R自動加載,則可以將其寫入到Rprofile.site文件的自定義函數里,重新啟動R即可實現。

在打開Rprofile.site文檔的最后加上如下代碼:

# 方式1:
.First <- function(){
library(praise)
  cat(praise("${EXCLAMATION}! ${EXCLAMATION}! Handsome man,you have done this ${adverb_manner}!"),"\n",praise(),"\n",praise(),"\n",date(),"\n")
}

# 方式2:
.First <- function(){
  # 加載程序包跟平常一樣用library或require
  library(data.table)
  library(RMySQL)
  library(dplyr)
  library(ggplot2)
  # 你可以將自定義函數的代碼腳本保存到"D:/myfunctions.R"文件里
  # 如果有的話,加載函數用source函數
  # source("D:/myfunctions.R") 
  library(praise)
  # 啟動提示語,可有可無
  cat(praise("${EXCLAMATION}! ${EXCLAMATION}! Handsome man,you have done this ${adverb_manner}!"),"\n",praise(),"\n",praise(),"\n",date(),"\n") 
}

重啟R則顯示如下:

重啟R則顯示效果

自定義啟動詳解2

配置.Renviron文件.Rprofile文件

軟件選項多到底是好事還是壞事?我也不知道,總之R像其它開源軟件一樣,有無窮的選項可配置。對新手來說,這是地獄;對熟悉的用戶來說,這也許是天堂吧。我們主要介紹兩個配置文件,.Renviron.Rprofile。這兩個文件名看起來有點奇怪,怪在哪兒?它們只有擴展名,沒有主文件名,平時我們看見的文件名似乎都是foobar.doc。在操作系統中有一個默認的規則,凡是以點開頭的文件都是隱藏文件,而且通常都是配置文件。前面那句list.files()代碼你要是運行過,可能就會發現很多以點開頭的文件和文件夾。

R啟動的時候會在系統的若干位置尋找配置文件,如果文件存在就會使用這些配置。這個巨復雜的啟動過程在?Startup中有詳細說明(問號是R中查看幫助的操作符),這是典型的Linux喜歡干的事情,什么點文件,什么環境變量,用得不亦樂乎。我總覺得這些東西把事情復雜化了,所以我只介紹兩個配置文件,要是你願意折騰那一堆系統環境變量,那么請便,我只介紹PATH這一個最重要的系統變量。

.Renviron文件

這個文件是為R自身設置一些環境變量的,這里面的環境變量僅僅對R有效,不改變操作系統的設置。先說一下什么是環境變量:它們是在當前操作系統環境中的一些變量,同一個變量對不同的用戶或不同的系統可能取值不同,這些變量對整個系統可見,所以系統內的所有程序都可以讀取它們的值,就像我們寫程序常常會事先賦值給一些常量供后面的代碼使用一樣。環境變量不需要有特定的名稱,可以任意命名,但有些名稱是約定俗成有特定意義的,比如PATH

.Renviron文件放在你的用戶目錄下,也就是~/。你可以在R里面直接打開這個文件[1]

# 如果文件不存在,它會被自動創建
file.edit('~/.Renviron')

我只推薦放一個環境變量在這里,就是R_LIBS_USER,它指定R的附加包安裝目錄,比如這個文件里面可以寫:

R_LIBS_USER="~/R"

寫入這一行設置之后,保存文件,重啟R,現在R就知道以后安裝R包就優先安裝到~/R目錄下,也就是在用戶目錄下創建一個名為R的文件夾用來存放附加包。因為這個目錄是固定的,所以即使將來升級R,R也會使用這個目錄裝包,你再也不必更新關於包的配置。另外一個好處是,R的附加包和主程序包分開在不同的位置,如果你不想用附加包了,你完全可以一口氣把~/R刪光,而完全不影響R自身的運行;否則,要是R主程序和附加包混在一個目錄下(默認情況就是這樣,除非主程序目錄不可寫),對包的管理來說也是大麻煩事。忍者必須把指揮部和小兵分清楚。注意如果~/R這個目錄不存在的話,你需要自己創建它,這個也可以在R里面操作:

dir.create('~/R')
.Rprofile文件

前面說到R啟動時,會查看一系列文件;其中.Renviron文件用來設置一些R要用的環境變量,而.Rprofile文件則是一個R代碼文件,在R啟動時,如果這個文件存在,它會被首先執行。因此,如果我們有一些任務要在R啟動時運行,或有一些個人選項要配置,都可以寫在這個文件里。Windows下這個文件還可以叫另一個名字,但忍者應該遵守統一的紀律,所以我們只用.Rprofile這一個文件名。在R里面同樣可以用file.edit()函數打開這個文件:

file.edit('~/.Rprofile')

R的options()函數可用來設置R運行時的一些選項,其中一個常用的選項就是CRAN鏡像地址,它告訴R應該從哪里安裝附加包。這個選項默認為空,所以每次安裝包或更新包,R都要跳出來問你選擇哪個CRAN鏡像,跳多了你可能也覺得煩,所以不如直接事先指定這個選項好了。以下是一種我在.Rprofile中的配置:

options(repos = c(CRAN = "http://streaming.stat.iastate.edu/CRAN",
                  CRANextra = "http://www.stats.ox.ac.uk/pub/RWin"))

離最近有CRAN鏡像,安裝包會最快;CRANextra主要是為Windows准備的,因為CRAN上有極少數的包沒有Windows版本,但牛津大學的Ripley大人好心提供了Windows的二進制編譯版本,所以那些包可以從他那邊安裝。

這個文件中可以放任意R代碼,就看各位的想象力和R功力如何了,用好這個文件可以為R編程增加不少方便。因為我是R包開發者,而我常用到devtools包,所以我的.Rprofile文件中還有一句:

if (interactive()) {
  suppressMessages(require(devtools))
  options(warn = 1)
}

這段話是什么意思,留給讀者思考。

自定義啟動詳解3

平時做R語言開發時,每次啟動R語言環境都會要加載很多package,甚是繁瑣。最近學習《R in action》時,介紹了自定義R語言啟動環境的方法。

windows環境下,R語言啟動時會到R_Home\etc目錄下找Rprofile.site文件,其中"R_Home"指的是R語言安裝目錄,例如c:\R。可以用notepad等文本編輯器打開c:\R\etc\Rprofile.site,進行修改

# Things you might want to change
# 下面是常規設置,包括,默認編輯器、制表符寬度等等
# options(papersize="a4")
# options(tab.width=2)
# options(editor="notepad")
# options(pager="internal")
# set the default help type
# options(help_type="text")
  options(help_type="html")

# 可以設置加載R包時,默認R包所在的目錄
.libPaths(c("D:\\Program Files\\R\\R-3.2.4\\library","H:\\R\\Plus-Packages"))

# set a site library
# 自定義庫路徑,便於備份
# .Library.site <- file.path(chartr("\\", "/", R.home()), "site-library")
# set a CRAN mirror
# 設置CRAN鏡像,選一個最近源,這樣安裝和更新包時就不用手動選取CRAN鏡像了
 local({r <- getOption("repos")
       r["CRAN"] <- "
       options(repos=r)})

# Give a fortune cookie, but only to interactive sessions
# (This would need the fortunes package to be installed.)
#  if (interactive())
#    fortunes::fortune()
.First <- function(){
	# 設置R啟動時加載的包
	library(TSA)
	library(MASS)
	# 啟動時交互,可自定義
	cat("\nWelcome at",date(),"\n")
}

# 退出時交互
.Last <- function(){
	cat("\nGoodnye at",date(),"\n")
}

.First()函數中除了加載常用package之外,還可以加載保存自己編寫的常用函數的源代碼文件

.Last()函數可以執行推出時清理工作,如保存命令歷史記錄、保存數據輸出和數據文件等等

自定義啟動詳解4

在R的win版本中Rprofile.site默認的配置如下:

# Things you might want to change

# options(papersize="a4")
# options(editor="notepad")
# options(pager="internal")

# set the default help type
# options(help_type="text")
  options(help_type="html")

# set a site library
# .Library.site <- file.path(chartr("\\", "/", R.home()), "site-library")

# set a CRAN mirror
# local({r <- getOption("repos")
#       r["CRAN"] <- "http://my.local.cran"
#       options(repos=r)})

# Give a fortune cookie, but only to interactive sessions
# (This would need the fortunes package to be installed.)
#  if (interactive()) 
#    fortunes::fortune()

自定義啟動詳解5

定義啟動項,關於stringsAsFactors永遠默認為TRUE的問題。

如果對stringsAsFactors永遠默認為TRUE深痛惡覺,可以修改Rprofile.site文件,加上每次啟動都自動運行的命令。

Set options(stringsAsFactors = FALSE) at the beginning of your R session, or in your .RProfile.

As the comments below may suggest, stringsAsFactors is a bit of a controversial topic within the R community. How irritating you find this default value may depend somewhat on how much time you spend using R to fit many "standard" statistical models (lm, glm, etc). Many of those model fitting and related functions are built around using the factor data type.

If you spend most of your time doing other more "generic" types of data analysis, you might find this default more irritating.

It is widely considered dangerous to globally set stringsAsFactors = FALSE for the reasons mentioned below: it can cause significant confusion when sharing code. Indeed, even if you work mainly alone, participating in online communities like StackOverflow can be tricky if you insist on running R with stringsAsFactors = FALSE: your answer to a question may not work for the OP, or you may not be able to replicate errors others are seeing!

Of course, everyone can make their own choices about how best to manage these risks for themselves.

定義啟動項,關於啟動的時候加載包相關問題

如果需要長期使用某個包的話,每次開啟都需要輸入library(),比較麻煩,因此可以讓R啟動時自動加載某些包。在R的安裝目錄/etc/Rprofile.site加入下載語句:

	# 例如讓R啟動時自動加載ggplot2包

	local({old <- getOption("defaultPackages")
	        options(defaultPackages = c(old, "ggplot2"))})

	# 在文章中引用R軟件包,例如引用ggplot2包:

	citation(package="ggplot2")
	To cite ggplot2 in publications, please use:
	
	  H. Wickham. ggplot2: elegant graphics for data analysis. Springer New
	  York, 2009.
	
	A BibTeX entry for LaTeX users is
	
	  @Book{,
	    author = {Hadley Wickham},
	    title = {ggplot2: elegant graphics for data analysis},
	    publisher = {Springer New York},
	    year = {2009},
	    isbn = {978-0-387-98140-6},
	    url = {http://had.co.nz/ggplot2/book},
	  }


	# get noisy package imports to shut up
	#   we have to jump through hoops to get the
	#   call to "library()" to work because it
	#   will try to load a package even if it is not
	#   a string literal
	sshhh <- function(a.package){
	  suppressWarnings(suppressPackageStartupMessages(
	    library(a.package, character.only=TRUE)))
	}
	
	# list of packages to auto-load if interactive
	auto.loads <-c("dplyr", "ggplot2", "magrittr", "assertr", "reshape")
	
	# auto-load dplyr and ggplot2
	if(interactive()){
	  invisible(sapply(auto.loads, sshhh))
	}

自定義啟動詳解6

總結常用的配置文件,方便查找和調用!

參考資料


  1. 注意Windows下你可能無法用鼠標右鍵新建文件的方式直接創建這個文件,聰明的Windows只允許用戶用命令行創建以點開頭的文件名,請問你知道mkdir這個命令嗎,或者你知道命令行窗口在哪兒打開嗎? ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM