當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R Startup R 會話開始時的初始化


R語言 Startup 位於 base 包(package)。

說明

R,啟動機製如下。

除非--no-environ在命令行上給出,R搜索要處理的站點和用戶文件以設置環境變量。站點文件的名稱是環境變量指向的名稱R_ENVIRON;如果未設置,‘base Rhome/etc/Renviron.site使用(如果存在,但在“factory-fresh”安裝中不存在)。用戶文件的名稱可以通過以下方式指定R_ENVIRON_USER環境變量;如果未設置,則搜索的文件是“.Renviron' 在當前或用戶的主目錄中(按該順序)。有關如何讀取文件的信息,請參閱“詳細信息”。

然後R搜索 site-wide 啟動配置文件R代碼除非命令行選項--no-site-file被給予。該文件的路徑取自R_PROFILE環境變量(之後base path.expand)。如果未設置此變量,則默認為‘base Rhome/etc/Rprofile.site’,如果存在則使用它(在‘factory-fresh’安裝中不存在)。此代碼源自工作區(全局環境)。用戶需要注意不要無意中在工作區中創建對象,通常建議使用local如果需要執行代碼:請參閱示例。.Library.site可以被賦值,並且賦值將有效地修改基本命名空間中變量的值,其中.libPaths()找到它。也可以分配給.First.Last,但不建議在執行環境中分配給其他變量,並且在某些舊版本中不起作用R.

那麽,除非--no-init-file被給予,R搜索用戶個人資料,文件R代碼。該文件的路徑可以通過R_PROFILE_USER環境變量(和base path.expand將被執行)。如果未設置,則會生成一個名為“.R配置文件’ 在當前目錄或用戶的主目錄中(按該順序)搜索。用戶配置文件來源於工作區。

請注意,當獲取站點和用戶配置文件時,僅加載 base 包,因此其他包中的對象需要通過例如utils::dump.frames 或顯式加載相關包後。

R然後從‘加載用戶工作區的已保存圖像.RData' 在當前目錄中,如果有的話(除非--no-restore-data或者--no-restore在命令行上指定)。

接下來,如果在搜索路徑上找到函數.First,則將其作為.First()執行。最後,運行base包中的函數.First.sys()。這會調用 require 來附加 options("defaultPackages") 指定的默認包。如果包含 methods 包,則該包會提前附加(通過函數 .OptRequireMethods() ),以便命名空間初始化(例如來自用戶工作區的初始化)能夠正確進行。

一個函數.First(和.Last)可以在適當的‘.R配置文件' 或者 'Rprofile.site' 文件或已保存在 '.RData’。如果您在啟動時想要一組與默認包不同的包,請插入對options在裏麵 '.R配置文件' 或者 'Rprofile.site' 文件。例如,options(defaultPackages = character())啟動時不會附加任何額外的包(僅base包)(或套R_DEFAULT_PACKAGES=NULL運行前作為環境變量R)。使用options(defaultPackages = "")或者R_DEFAULT_PACKAGES=""強製執行 R係統默認。

在支持它的front-ends上,命令曆史記錄是從環境變量指定的文件中讀取的R_HISTFILE(默認 '.曆史' 在當前目錄中)除非--no-restore-history或者--no-restore被指定。

命令行選項 - 香草暗示--no-site-file,--no-init-file,--no-environ和(除了R CMD)--no-restore

細節

請注意,啟動時使用兩種類型的文件:環境文件其中包含要設置的環境變量列表,以及配置文件其中包含R代碼。

站點或用戶環境文件中的行應該是以 # 開頭的注釋行,或者是 name=value 形式的行。後者將環境變量 name 設置為 value ,覆蓋現有值。如果 value 包含 ${foo-bar} 形式的表達式,則該值是環境變量 foo 的值(如果已設置),否則為 bar 。對於 ${foo:-bar} ,如果設置為非空值,則值為 foo 的值,否則為 bar 。 (如果其形式為 ${foo} ,則默認為 "" 。)此結構可以嵌套,因此 bar 可以采用相同的形式(如 ${foo-${bar-blah}} )。請注意,大括號是必需的:例如 $HOME 將不會被解釋。

value 中的前導和尾隨空格被刪除。然後以與 Unix shell 類似的方式處理 value:特別是刪除前麵沒有反斜杠的(單或雙)引號,並且刪除除此類引號內的反斜杠。

為了可讀性和未來兼容性,建議僅使用與 Unix shell 具有相同行為的結構。因此,變量的擴展應使用雙引號(例如 "${HOME}" ,以防它們可能包含反斜杠),並且包含反斜杠的文字應使用單引號。如果變量值可能以反斜杠結尾,例如 Windows 上的 PATH,則可能需要保護以下引號,例如"${PATH}/" 。建議使用正斜杠而不是反斜杠。可以將文本混合在單引號和雙引號中,請參見下麵的示例。

在具有 sub-architectures 的係統(主要是 Windows)上,文件‘Renviron.site' 和 'Rprofile.site’首先在architecture-specific目錄中查找,例如'base Rhome/etc/i386/Renviron.site’。以及例如'.Renviron.i386' 將優先於 ' 使用.Renviron’。

環境文件中的行長度(擴展後)有 100,000 字節的限製。

注意

啟動代碼期間無意與用戶進行交互。嘗試這樣做可能會導致係統崩潰R過程。

在 Unix 版本上R還有一個文件‘base Rhome/etc/Renviron’這是在 start-up 處理的早期讀取的。它包含由設置的環境變量R在配置過程中。該文件中的值可以在站點或用戶環境文件中覆蓋:請勿更改‘base Rhome/etc/Renviron’本身。請注意,這與‘base Rhome/etc/Renviron.site’。

命令行選項可能不適用於替代front-ends:它們不適用於 macOS 上的R.app

R CMD checkR CMD build並不總是讀取標準啟動文件,但它們總是讀取特定的‘⁠Renviron⁠’文件。這些的位置可以通過環境變量控製R_CHECK_ENVIRONR_BUILD_ENVIRON。如果設置了這些值,它們的值將用作“⁠Renviron⁠' 文件;否則,文件‘〜/.R/check.Renviron' 或者 '〜/.R/build.Renviron’或使用sub-architecture-specific版本。

如果你想 '~/.Renviron' 或者 '〜/.Rprofile’被孩子忽視R進程(例如由R CMD checkR CMD build)、設置合適的環境變量R_ENVIRON_USER或者R_PROFILE_USER到(如果可能的話,Windows 上沒有)""或一個不存在的文件的名稱。

例子

## Not run: 
## Example ~/.Renviron on Unix
R_LIBS=~/R/library
PAGER=/usr/local/bin/less

## Example .Renviron on Windows
R_LIBS=C:/R/library
MY_TCLTK="c:/Program Files/Tcl/bin"
# Variable expansion in double quotes, string literals with backslashes in
# single quotes.
R_LIBS_USER="${APPDATA}"'\R-library'

## Example of setting R_DEFAULT_PACKAGES (from R CMD check)
R_DEFAULT_PACKAGES='utils,grDevices,graphics,stats'
# this loads the packages in the order given, so they appear on
# the search path in reverse order.

## Example of .Rprofile
options(width=65, digits=5)
options(show.signif.stars=FALSE)
setHook(packageEvent("grDevices", "onLoad"),
        function(...) grDevices::ps.options(horizontal=FALSE))
set.seed(1234)
.First <- function() cat("\n   Welcome to R!\n\n")
.Last <- function()  cat("\n   Goodbye!\n\n")

## Example of Rprofile.site
local({
  # add MASS to the default packages, set a CRAN mirror
  old <- getOption("defaultPackages"); r <- getOption("repos")
  r["CRAN"] <- "http://my.local.cran"
  options(defaultPackages = c(old, "MASS"), repos = r)
  ## (for Unix terminal users) set the width from COLUMNS if set
  cols <- Sys.getenv("COLUMNS")
  if(nzchar(cols)) options(width = as.integer(cols))
  # interactive sessions get a fortune cookie (needs fortunes package)
  if (interactive())
    fortunes::fortune()
})

## if .Renviron contains
FOOBAR="coo\bar"doh\ex"abc\"def'"

## then we get
# > cat(Sys.getenv("FOOBAR"), "\n")
# coo\bardoh\exabc"def'

## End(Not run)

也可以看看

有關 Windows 上 ‘home’ 目錄的定義,請參閱‘rw-FAQ’ Q2.14。從運行中可以發現R經過Sys.getenv("R_USER").

.Last結束時的最終行動R會議。commandArgs用於訪問命令行參數。

X11quartz 的幫助中提供了使用啟動文件設置圖形設備默認值的示例。

R 簡介以獲取更多命令行選項:Memory 的幫助文件中介紹了影響內存管理的選項。

readRenviron讀書 '.Renviron’文件。

有關分析代碼,請參閱 Rprof

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Initialization at Start of an R Session。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。