本文内容来源于 Rstatistics.net 的 60 R Tips,这些都是作者们长期使用 R 积累下来的一些技巧或者建议。我觉得这个内容挺好的,并且在书上看不到这些内容,所以做了搬运和翻译,重点是加了例子,否则如果只看文字可能搞不懂状况。
本文转载自: 60 个实用的 R 语言技巧 | EthanDeng +http://ddswhu.com/2015/09/07/60-r-tips/
转载请注明以上的原文地址。
本文内容来源于 Rstatistics.net 的 60 R Tips,这些都是作者们长期使用 R 积累下来的一些技巧或者建议。我觉得这个内容挺好的,并且在书上看不到这些内容,所以做了搬运和翻译,重点是加了例子,否则如果只看文字可能搞不懂状况。
- 在将 factor 类型的变量转为数值变量的时候切记不要使用 as.numeric(),正确的方式是 as.numeric(as.character(myFactorVar))。 - 1 
 2
 3- cha2fac <- as.factor(c("4","8","10","15")) 
 as.numeric(cha2fac)
 as.numeric(as.character(cha2fac))
- 使用选项 options(show.error.messages = F) 可以关闭错误信息提示。 - 1 
 2
 3- class(x) # error msg: Error: object 'x' not found 
 options(show.error.messages = F)
 class(x)
- 使用 file.path() 创建(使用)文件路径,这可以保证在不同系统下都适用。 - 1 - setwd(file.path("F:", "git", "roxygen2")) 
- 在对字符串排序的时候,如果需要对数字也能排序,可以使用 gtools 包中的 mixedsort(),效果与 sort() 不一样。 - 1 
 2
 3
 4- Treatment <- c("Control", "Asprin 10mg/day", "Asprin 50mg/day", "Asprin 100mg/day", "Acetomycin 100mg/day", "Acetomycin 1000mg/day") 
 sort(Treatment)
 require(gtools)
 mixedsort(Treatment)
- 在绘图的时候使用 ylim = range(myNumericData) + 10 可以调整 Y 轴绘图范围,可以使用倍数或者区间值。 - 1 
 2
 3
 4
 5- x <- seq(1:10) 
 set.seed(1101)
 y <- 10*rnorm(10)
 plot(x, y)
 plot(x, y, ylim = 1.25*range(y))
- 使用 plot() 绘图时,可以使用 las 参数调整坐标轴标签(数字)的显示方向,las 取值 {0,1,2,3},对应的对齐方式为 {平行于轴(默认),水平(这个不错),垂直于轴,垂直}。 - 1 
 2- plot(x, y, las = 1) 
 plot(x, y, las = 2)
- Use memory.limit(size=2500) 限制 R 占用内存。 
- alarm() 函数可以添加到我们函数、过程的末尾,用以提示工作完成进度。(注意:RStudio 中无效) - 1 
 2
 3
 4- for (i in 1:5) { 
 Sys.sleep(1)
 alarm()
 }
- eval(parse(text=paste(“a <- 10”))) 会创建向量 a 并赋值为 10。这个命令可以将字符串作为 R 命令执行。 - 1 
 2- eval(parse(text=paste("a <- 10"))) 
 a
- sessionInfo() 可以获取 R 的版本、环境信息,以及加载的包的信息。 - 1 - sessionInfo() 
- 计算从 word1 到 word2 所需要的变化可以使用 adist(word1, word2). - 1 - adist("hello world","hello wordx") 
- 使用选项 options(max.print=1000000) 可以增加控制台的信息显示的行数。 - 1 - options(max.print=1000000) 
- 使用 cmd 运行 R 代码:”C:\your-R-path\R.exe” CMD BATCH –vanilla –slave - 1 - "c:\project-path\my_script.R" #(可以用这个写自动运行的脚本,比如批处理。) 
- 如果有多个 R 会话,每个 R 的唯一 id 可以用 Sys.getpid() 获取。 - 1 - Sys.getpid() 
- 可以使用 unname() 去除 R 对象的名称属性。 - 1 
 2- y <- quantile(mtcars$mpg) 
 unname(y)
- 检验两个对象(x 和 y)是否一致使用 identical(x, y),使用 all.equal 会比较各种属性是否一致。 - 1 
 2
 3
 4
 5
 6- x <- c(1, 2) 
 y <- as.vector(x)
 identical(x, y)
 all.equal(x, y)
 y2 <- c(y, 3)
 all.equal(x, y2)
- 使用 R 获取 Twitter 推文(用于文本分析)。http://rstatistics.net/extracting-tweets-with-r/ 
- 关于时间序列分析简短的介绍:http://rstatistics.net/time-series-analysis/
- 当某个步骤运行的时间太长(超过预先设定的时间),可以使用 R.utils 包中的 withTimeout() 打断,然后跳到下一个步骤继续运行。
- 可以使用 dist() 计算矩阵行与行之间的距离(默认是欧氏距离)。 - 1 
 2- x <- matrix(seq(1:20), ncol = 4, byrow = FALSE) 
 dist(x, method = "euclidean", upper = TRUE)
- 计算向量的(多重)差分可以使用 diff() - 1 
 2- x <- c(seq(1:5), seq(from = 1, to = 9, by = 2)) 
 diff(x, 2)
- 选项 options(scipen=999) 可以关闭数字科学记数法显示。 - 1 
 2
 3- 1e-5 
 options(scipen=999)
 1e-5
- earth 包中的 bagEarth() 可以用来做 Bagged MARS (多元适应性回归平滑) 
- 可以使用 setClass(‘myClass’) 定义一个类型 myClass,setAs() 可以做进一步的自定义。
- 创建大量的变量可以使用 assign (“varName”, 10),原因在于,我们可以向 varName 传递变量名(比如用循环),方便编程。 - 1 - assign("x", 10) 
- dim(matrix) 返回的是矩阵的行数与列数。 - 1 
 2- my.Matrix <- matrix(1:20, ncol = 4) 
 dim(my.Matrix)
- 两个编写函数的技巧:1. 使用 … 传递已有函数的参数。2. 使用 invisible 隐藏输出。 
 视频参看:https://www.youtube.com/watch?v=ahRHTXNjixU
- 使用 data.matrix() 可以将一个数据框转为数值矩阵,并且因子类型也会得到正确的转化。
- invisible(..) 可以不显示输出,在定义函数的时候经常使用到。
- cat(“\014”) 能清空 R 会话中的内容(类似于 CTRL + L 清屏,还是蛮有用的)。 - 1 - cat("\014") 
- dir(“folder.path”) 会显示文件夹内的内容,类似于 cmd。 - 1 
 2- dir() 
 dir("subfolder.path")
- 在一个因子变量中如果存在缺失值,建议将缺失值做成一个因子等级 UNKNOWN,可以使用 levels(Var) <-c(levels(Var), “UNKNOWN”) 来实现。 - 1 
 2
 3- my.Factor <- as.factor(c("First", "Second", "Third", NA)) 
 levels(my.Factor) <-c(levels(my.Factor), "UNKNOWN")
 my.Factor
- 初始化所有加载的包可以使用 lapply(x, require, character.only = T),其中 x 为包的名称。 - 1 - lapply(c("dplyr", "tidyr"), require, character.only = T) 
- rev() 函数可以将一个向量翻转过来。 - 1 
 2- x <- seq(1:10, ) 
 rev(x)
- complete.cases() 顾名思义,它的作用是得到完整观测(不含缺失)的索引,用于数据框缺失值的行删除。 - 1 
 2
 3
 4- nrow(mtcars)mtcars$mpg[mtcars$disp > 200] <- NA 
 mtcars
 mtcars2 <- mtcars[complete.cases(mtcars), ]
 mtcars2
- nnet 包中的 avNNet() 可以用来做 Averaged 神经网络模型。 
- file.remove(‘filepath’) 可以用来删除文件夹中的文件,如果我们要删除重复性的中间文件,可以用它来实现。 - 1 
 2- file.create("tempfile.R") 
 file.remove("tempfile.R")
- ada 包中的 ada() 函数可以用来做 Boosted 分类树问题。 
- unclass() 可以将 lm 对象拆散成列表(list),方便我们获取未被显示的元素。 - 1 
 2- mod <- lm(wt ~ disp + cyl, data = mtcars) 
 unclass(mod)
- 根据数据框(df)的两列进行排序可以使用 df[order(df$col1, df$col2), ] - 1 
 2- mtcars 
 mtcars[order(mtcars$carb, mtcars$hp), ]
- 将一个 N 阶因子变量转为 N 个 0-1 变量最简单的方式是 model.matrix(~as.factor(Data)+0) - 1 - model.matrix(~as.factor(mtcars$carb)+0) 
- 对一个时间序列去季节趋势可以使用 seaadj():http://goo.gl/Oio7s2. 
- 在一个函数内对函数外的变量的赋值使用 <<-,而不要用 <-。
- 在 Windows 中,使用 memory.limit(size=desired-size) 可以限制 R 使用内存的大小,其他操作系统,使用 mem.limits()。
- 使用 file.copy(from=fromFile, to = toFile, overwrite = TRUE) 可以实现文件的复制。
- debugonce() 可以调试一次代码,它与 debug() 的区别是无需使用 undebug() 跳出调试。
- 在 R 中,将一个因子类型的变量(factor)转化为一组 0/1 虚拟变量可以使用 bins <- model.matrix(~ 0 + varName, data),在回归的时候经常会用到这个。(同 42)
- arules 包中的 discretize() 函数可以很方便的将一个连续变量转为分类变量(categorical)。
- NROW() 类似于 nrow(),不过前者对向量也适用,相比 length() 更具有鲁棒性。
- 在 R 里面输入 commandArgs(),将会返回使用 cmd 运行 R 脚本所需要传递的参数。
- 在函数内使用 attr(myFunc, “AttrName”) <- myVal,在我们下次调用 myFunc 的时候将会记住 AttrName 这个属性。
- object.size() 可以得到给定 R 对象所消耗的内存。
- 当我们处理比较大的 R 项目的时候,可以使用 ls.str() 查看这些 R 对象的结构信息。
- dir(path=’dir_path’) 将会列出 dir_path 下的所有文件及文件夹。
- library(help = libname) 会显示 libname 这个包的所有函数以及所带的数据集。(前提是必须安装了这个包) - 1 
 2- install.packages("AER") 
 library(help = AER)
- get(“objectNameString”) 会获取对象名称为 objectNameString 的对象。如果这个对象在一个特定的环境中,使用 envir 参数。 - 1 
 2- x <- c(1, 2, 3) 
 get("x")
- 可以使用 cor.test(x,y) 计算 x 与 y 的相关性。 
- 如果你要做交互式的数据展示,Shiny 是一个很好的选择,这里是 Shiny 的一张备忘单。http://bit.ly/1pFWGJW
本文转载自: 60 个实用的 R 语言技巧
