本文内容来源于 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
3cha2fac <- as.factor(c("4","8","10","15"))
as.numeric(cha2fac)
as.numeric(as.character(cha2fac))使用选项 options(show.error.messages = F) 可以关闭错误信息提示。
1
2
3class(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
4Treatment <- 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
5x <- 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
2plot(x, y, las = 1)
plot(x, y, las = 2)Use memory.limit(size=2500) 限制 R 占用内存。
alarm() 函数可以添加到我们函数、过程的末尾,用以提示工作完成进度。(注意:RStudio 中无效)
1
2
3
4for (i in 1:5) {
Sys.sleep(1)
alarm()
}eval(parse(text=paste(“a <- 10”))) 会创建向量 a 并赋值为 10。这个命令可以将字符串作为 R 命令执行。
1
2eval(parse(text=paste("a <- 10")))
asessionInfo() 可以获取 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
2y <- quantile(mtcars$mpg)
unname(y)检验两个对象(x 和 y)是否一致使用 identical(x, y),使用 all.equal 会比较各种属性是否一致。
1
2
3
4
5
6x <- 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
2x <- matrix(seq(1:20), ncol = 4, byrow = FALSE)
dist(x, method = "euclidean", upper = TRUE)计算向量的(多重)差分可以使用 diff()
1
2x <- c(seq(1:5), seq(from = 1, to = 9, by = 2))
diff(x, 2)选项 options(scipen=999) 可以关闭数字科学记数法显示。
1
2
31e-5
options(scipen=999)
1e-5earth 包中的 bagEarth() 可以用来做 Bagged MARS (多元适应性回归平滑)
- 可以使用 setClass(‘myClass’) 定义一个类型 myClass,setAs() 可以做进一步的自定义。
创建大量的变量可以使用 assign (“varName”, 10),原因在于,我们可以向 varName 传递变量名(比如用循环),方便编程。
1
assign("x", 10)
dim(matrix) 返回的是矩阵的行数与列数。
1
2my.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
2dir()
dir("subfolder.path")在一个因子变量中如果存在缺失值,建议将缺失值做成一个因子等级 UNKNOWN,可以使用 levels(Var) <-c(levels(Var), “UNKNOWN”) 来实现。
1
2
3my.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
2x <- seq(1:10, )
rev(x)complete.cases() 顾名思义,它的作用是得到完整观测(不含缺失)的索引,用于数据框缺失值的行删除。
1
2
3
4nrow(mtcars)mtcars$mpg[mtcars$disp > 200] <- NA
mtcars
mtcars2 <- mtcars[complete.cases(mtcars), ]
mtcars2nnet 包中的 avNNet() 可以用来做 Averaged 神经网络模型。
file.remove(‘filepath’) 可以用来删除文件夹中的文件,如果我们要删除重复性的中间文件,可以用它来实现。
1
2file.create("tempfile.R")
file.remove("tempfile.R")ada 包中的 ada() 函数可以用来做 Boosted 分类树问题。
unclass() 可以将 lm 对象拆散成列表(list),方便我们获取未被显示的元素。
1
2mod <- lm(wt ~ disp + cyl, data = mtcars)
unclass(mod)根据数据框(df)的两列进行排序可以使用 df[order(df$col1, df$col2), ]
1
2mtcars
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
2install.packages("AER")
library(help = AER)get(“objectNameString”) 会获取对象名称为 objectNameString 的对象。如果这个对象在一个特定的环境中,使用 envir 参数。
1
2x <- c(1, 2, 3)
get("x")可以使用 cor.test(x,y) 计算 x 与 y 的相关性。
- 如果你要做交互式的数据展示,Shiny 是一个很好的选择,这里是 Shiny 的一张备忘单。http://bit.ly/1pFWGJW
本文转载自: 60 个实用的 R 语言技巧