用户自编函数
R的一个最大优点之一就是用户可以自行添加函数。事实上,R中的许多函数都是由已有函数构成的。一个函数的结构看起来大致如此:
myfunction <- function(arg1, arg2, ...){
statements
return(object)
}
下面让我们看一个使用switch结构的用户自编函数,此函数可让用户选择输出当前日期的格式。在函数声明中为参数指定的值将作为默认值。在函数mydate()中,如果未指定type则long将成为默认的日期格式。
mydate <- function(type="long"){ switch(type, long = format(Sys.time, "%A %B %d %Y), short = format(Sys.time, "m-%d-%y), cat(type, "is not a recognized type\n") ) }
在创建好自己的函数之后,我们希望在每个会话中都能直接使用它们。 程序员可以通过自定义启动环境设置R选项、设置工作目录、加载常用的包、加载用户编写的函数、设置默认的CRAN下载网站以及执行其他常见任务。
可以通过站点初始化文件(Rprofile.site)或目录初始化文件(.Rprofile)自定义R的环境。R在启动时会执行这样几个文本文件的代码。在启动时,R会加载R_HOME/etc目录中的Rprofile.site文件,其中R_HOME是一个环境变量。然后R会在当前目录中寻找.Rprofile文件。如果R没有在当前目录找到这个文件,它就会到用户的主目录去寻找。可以通过Sys.getenv("R_HOME")和getwd()来确认R_HOME和HOME和当前工作目录。
可以在这些文件中放入两个特殊的函数。每个R会话开始时都会执行.First()函数,而每个会话结束时都会执行.Last()函数。代码示例:
options(papersize = "a4") //设置常用选项 options(editor = "notepad") options(pager = "internal") options(tab.width = 2) options(width = 130) options(graphics.record = TRUE) options(show.signif.starts = FALSE) options(prompt = "> ") //设置R交互提示符 options(continue = "+ ") .libPaths("c:/my _R_library") //设置本地库路径 local({r <- getoptions("repos") //设置默认的CRAN镜像 r["CRAN"] <- "http://cran.case.edu/" options(repos = f)}) .First <- function(){ //启动函数 library(lattice) library(Hmsic) source("C:/mydir/myfunctions.R") cat("\nWelcome at", date(), "\n") } .Last <- function(){ //会话结束函数 cat("\nGoodbye at ", date(), "\n") }
其中,有以下几点需要注意:
- 设置.libPaths值可以为R目录树之外的扩展包创建一个本地库。这样可以在升级时保持某个扩展包不变。
- 设置默认的CRAN镜像就不必每次执行install.packages()命令时都选择镜像了。
- .Frist()函数中可以加载常用的库,也可以加载保存自己编写的常用函数的源代码文件。
- .Last()函数中可以执行某些清理操作包括保存命令历史记录、保存程序输出和保存数据文件。
2014-2-10 12:18:00