高效使用R笔记2

一、 R启动文件

每次R语言启动读入.Renviron和.Rprofile两个文件,前者主要是环境变量,程序位置和API密钥等;后者是启动进需要运行的几行R代码。启动时先找.Renviron,然后是.Rprofile,它们出现在3个目录中,安装目录(R_HOME,R.home()),家目录(HOME, Sys.getenv("HOME"))和当前工作目录(getwd()),顺序是从后往前的优先级,也就是有第三个就忽略第二个的。 应该尽量在项目中使用特别的文件,防止对默认文件进行修改,更保险。

来看一个启动过程举例:

example(Startup)

Startp> ## Not run: 
Startp> ##D ## Example ~/.Renviron on Unix
Startp> ##D R_LIBS=~/R/library
Startp> ##D PAGER=/usr/local/bin/less
Startp> ##D 
Startp> ##D ## Example .Renviron on Windows
Startp> ##D R_LIBS=C:/R/library
Startp> ##D MY_TCLTK="c:/Program Files/Tcl/bin"
Startp> ##D 
Startp> ##D ## Example of setting R_DEFAULT_PACKAGES (from R CMD check)
Startp> ##D R_DEFAULT_PACKAGES='utils,grDevices,graphics,stats'
Startp> ##D # this loads the packages in the order given, so they appear on
Startp> ##D # the search path in reverse order.
Startp> ##D 
Startp> ##D ## Example of .Rprofile
Startp> ##D options(width=65, digits=5)
Startp> ##D options(show.signif.stars=FALSE)
Startp> ##D setHook(packageEvent("grDevices", "onLoad"),
Startp> ##D         function(...) grDevices::ps.options(horizontal=FALSE))
Startp> ##D set.seed(1234)
Startp> ##D .First <- function() cat("\n   Welcome to R!\n\n")
Startp> ##D .Last <- function()  cat("\n   Goodbye!\n\n")
Startp> ##D 
Startp> ##D ## Example of Rprofile.site
Startp> ##D local({
Startp> ##D   # add MASS to the default packages, set a CRAN mirror
Startp> ##D   old <- getOption("defaultPackages"); r <- getOption("repos")
Startp> ##D   r["CRAN"] <- "http://my.local.cran"
Startp> ##D   options(defaultPackages = c(old, "MASS"), repos = r)
Startp> ##D   ## (for Unix terminal users) set the width from COLUMNS if set
Startp> ##D   cols <- Sys.getenv("COLUMNS")
Startp> ##D   if(nzchar(cols)) options(width = as.integer(cols))
Startp> ##D   # interactive sessions get a fortune cookie (needs fortunes package)
Startp> ##D   if (interactive())
Startp> ##D     fortunes::fortune()
Startp> ##D })
Startp> ##D 
Startp> ##D ## if .Renviron contains
Startp> ##D FOOBAR="coo\bar"doh\ex"abc\"def'"
Startp> ##D 
Startp> ##D ## then we get
Startp> ##D # > cat(Sys.getenv("FOOBAR"), "\n")
Startp> ##D # coo\bardoh\exabc"def'
Startp> ## End(Not run)
Startp> 
Startp> 

1、 .Rprofile

可以使用这个命令编辑这个文件,file.edit("./.Rprofile")这里是编辑本项目的。
小插曲:
关于不同操作系统的路径冲突问题,经常看到说反斜杠或者双斜杠解决,这里看到了另外两种解决方案:
file.path(".","test","a.csv"), 另外一个是normalizedPath("./test/a/csv"),会根据系统自动切换相符的路径,不错。
pathological包里的os_path()函数可以查找.Rprofile和.Renviron文件file.exits()检查文件是否存在。

1) .Rprofile文件历程

其实它只是一个普通R脚本改了个名字而已,Ctrl+Shift+F10可以重启R会话。options()是我们熟悉的常用的默默默认选项设置函数。

# 欢迎语
message("Awesome!")
# 自定提示符
options(prompt='zR> ')
# 去除多行代码缩近提示符+,方便命令模式下的代码复制
options(continue='')

作者认为options(stringAsFactors=FALSE),让文本转换成字符而不是因子,放在启动脚本是有问题的,减少了代码可移植性。

2) 设置CRAN镜像

其实可以在Rstudio中简单完成,这里是配置文件进行。

# local创建新的空空间,避免对象r影响全局.GlobalEnv
local({
r <- getOption("repos")
r["CRAN'] <- "https://mirrors.bfsu.edu.cn/CRAN/" 
options(repos <- r)
})

3) fortunes包

这只是为了好玩而已,有趣的灵魂呀!这是一个R语录包,添加如下两行,每次输出一条语录:

if(interactive())
  try(fortunes::fortune(), silent=T)

使用try避免报错,::直接调用函数避免引入包。.Last()函数总在最后运行,require加载包也是避免报错。

.Last <- function(){
cond <- suppressWarnings(!reauire(fortunes,quietly = TRUE)
if(cond)
try(install.packages("fortunes"),silent=T)
message("Goodbye at ",date(), "\n")
}

4) .Rprofile隐藏空间

rm(list=ls())会删除所有,使用.开头的ls()不会显示,可以避免。

2、 .Renviron

R_LIBS是这个文件的典型应用,Sys.getenv("R_LIBS")

二、 Rstudio

Rstudio我们都很熟悉了,看下有什么更值得学习和记录的东西,杰出的调试支持。作者是老程序员,所以希望少用鼠标,于是快捷键必不可少。

1)自动完成功能

R语言里有一些基本的自动完成,Rstudio更好用。最近很火的kite号称可以人工智能自动补全,应该是更更好用了。

2)快捷键

Alt+H+U更新Rstudio,应该是浏览器server版本不好用。
Alt+T访问工具菜单,方便使用。可以指定不同的R版本,脚本的git版本控制,Restore .Rdata,编码风格,诊断(硬件太老有用)以及字体大小等外观。
Ctrl+Z/Shift+Z 撤销/恢复,以前后面不知道呢
Ctrl+Enter 运行当前或选中命令
Ctrl+Alt+R 运行打开文档中的所有代码
Alt+Shift+Up/Down 向上向下复制当前行
Ctrl+D 删除当前行
当然,快捷键可以根据喜好修改。

3)推荐的目录结构

Project\
- Readme.RMD # 项目描述
- setup.r # 必须的包
- R/ #代码
- input # 数据文件
- graphics/ #图
- output/ #输出 

压箱底的,一般不用

基本线性代数系统框架BLAS,切换到ATLAS或者OenBLAS,Intel MKL。

library("benchmarkme")
get_linear_alegebra()
res <- benchmark_std()

其他的改进策略
Microsoft R Open, 多线程的数学库,Rho(以前叫CXXR), pqR(2.15,过时了?), Renjin(可运行在JVM上),Tibco(C++为基础的解释器)以及Oracle的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容