60 個實用的 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))。
cha2fac <- as.factor(c("4","8","10","15"))
as.numeric(cha2fac)
as.numeric(as.character(cha2fac))
  • 使用選項 options(show.error.messages = F) 可以關閉錯誤信息提示。
class(x) # error msg: Error: object 'x' not found
options(show.error.messages = F)
class(x)
  • 使用 file.path() 創建(使用)文件路徑,這可以保證在不同系統下都適用。
setwd(file.path("F:", "git", "roxygen2"))
  • 在對字符串排序的時候,如果需要對數字也能排序,可以使用 gtools 包中的 mixedsort(),效果與 sort() 不一樣。
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 軸繪圖範圍,可以使用倍數或者區間值。
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},對應的對齊方式爲 {平行於軸(默認),水平(這個不錯),垂直於軸,垂直}。
plot(x, y, las = 1)
plot(x, y, las = 2)
  • 關於高階迴歸分析的使用情境的彙總參看:http://rstatistics.net/special-forms-of-regression/
  • Use memory.limit(size=2500) 限制 R 佔用內存。
  • alarm() 函數可以添加到我們函數、過程的末尾,用以提示工作完成進度。(注意:RStudio 中無效)
for (i in 1:5) {
Sys.sleep(1)
alarm()
}
  • eval(parse(text=paste(“a <- 10”))) 會創建向量 a 並賦值爲 10。這個命令可以將字符串作爲 R 命令執行。
eval(parse(text=paste("a <- 10")))
a
  • sessionInfo() 可以獲取 R 的版本、環境信息,以及加載的包的信息。
sessionInfo()
  • 計算從 word1 到 word2 所需要的變化可以使用 adist(word1, word2).
adist("hello world","hello wordx")
  • 使用選項 options(max.print=1000000) 可以增加控制檯的信息顯示的行數。
options(max.print=1000000)
Sys.getpid()
  • 可以使用 unname() 去除 R 對象的名稱屬性。
y <- quantile(mtcars$mpg)
unname(y)
  • 檢驗兩個對象(x 和 y)是否一致使用 identical(x, y),使用 all.equal 會比較各種屬性是否一致。
x <- c(1, 2)
y <- as.vector(x)
identical(x, y)
all.equal(x, y)
y2 <- c(y, 3)
all.equal(x, y2)
x <- matrix(seq(1:20), ncol = 4, byrow = FALSE)
dist(x, method = "euclidean", upper = TRUE)
  • 計算向量的(多重)差分可以使用 diff()
x <- c(seq(1:5), seq(from = 1, to = 9, by = 2))
diff(x, 2) 
  • 選項 options(scipen=999) 可以關閉數字科學記數法顯示。
1e-5
options(scipen=999)
1e-5
  • earth 包中的 bagEarth() 可以用來做 Bagged MARS (多元適應性迴歸平滑)
  • 可以使用 setClass(‘myClass’) 定義一個類型 myClass,setAs() 可以做進一步的自定義。
  • 創建大量的變量可以使用 assign (“varName”, 10),原因在於,我們可以向 varName 傳遞變量名(比如用循環),方便編程。
assign("x", 10)
  • dim(matrix) 返回的是矩陣的行數與列數。
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 清屏,還是蠻有用的)。
cat("\014")
  • dir(“folder.path”) 會顯示文件夾內的內容,類似於 cmd。
dir()
dir("subfolder.path")
  • 在一個因子變量中如果存在缺失值,建議將缺失值做成一個因子等級 UNKNOWN,可以使用 levels(Var) <-c(levels(Var), “UNKNOWN”) 來實現。
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 爲包的名稱。
lapply(c("dplyr", "tidyr"), require, character.only = T)
  • rev() 函數可以將一個向量翻轉過來。
x <- seq(1:10, )
rev(x)
  • complete.cases() 顧名思義,它的作用是得到完整觀測(不含缺失)的索引,用於數據框缺失值的行刪除。
nrow(mtcars)mtcars$mpg[mtcars$disp > 200] <- NA
mtcars
mtcars2 <- mtcars[complete.cases(mtcars), ]
mtcars2
  • nnet 包中的 avNNet() 可以用來做 Averaged 神經網絡模型。
  • file.remove(‘filepath’) 可以用來刪除文件夾中的文件,如果我們要刪除重複性的中間文件,可以用它來實現。
file.create("tempfile.R")
file.remove("tempfile.R")
  • ada 包中的 ada() 函數可以用來做 Boosted 分類樹問題。
  • unclass() 可以將 lm 對象拆散成列表(list),方便我們獲取未被顯示的元素。
mod <- lm(wt ~ disp + cyl, data = mtcars)
unclass(mod)
  • 根據數據框(df)的兩列進行排序可以使用 df[order(dfcol1,df col2), ]
mtcars
mtcars[order(mtcars$carb, mtcars$hp), ]
  • 將一個 N 階因子變量轉爲 N 個 0-1 變量最簡單的方式是 model.matrix(~as.factor(Data)+0)
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 這個包的所有函數以及所帶的數據集。(前提是必須安裝了這個包)
install.packages("AER")
library(help = AER)
  • get(“objectNameString”) 會獲取對象名稱爲 objectNameString 的對象。如果這個對象在一個特定的環境中,使用 envir 參數。
x <- c(1, 2, 3)
get("x")
  • 使用 cmd 運行 R 代碼:”C:\your-R-path\R.exe” CMD BATCH –vanilla –slave
"c:\project-path\my_script.R" #(可以用這個寫自動運行的腳本,比如批處理。)
  • 可以使用 cor.test(x,y) 計算 x 與 y 的相關性。
  • 如果你要做交互式的數據展示,Shiny 是一個很好的選擇,這裏是 Shiny 的一張備忘單。
    http://bit.ly/1pFWGJW
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章