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这个命令吗,或者你知道命令行窗口在哪儿打开吗? ↩︎

posted @ 2017-07-04 23:26  银河统计  阅读(10551)  评论(1编辑  收藏  举报