本文轉載自: 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)
- 如何檢測時間序列中的奇異值?
[https://blog.twitter.com/2015/introducing-practical-and-robust-anomaly-
detection-in-a-time-series](https://blog.twitter.com/2015/introducing-practical-and-robust-anomaly-
detection-in-a-time-series) - 如果有多個 R 會話,每個 R 的唯一 id 可以用 Sys.getpid() 獲取。
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)
- 使用 R 獲取 Twitter 推文(用於文本分析)。
http://rstatistics.net/extracting-tweets-with-r/ - 關於時間序列分析簡短的介紹:
http://rstatistics.net/time-series-analysis/ - 當某個步驟運行的時間太長(超過預先設定的時間),可以使用 R.utils 包中的 withTimeout() 打斷,然後跳到下一個步驟繼續運行。
- 可以使用 dist() 計算矩陣行與行之間的距離(默認是歐氏距離)。
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(df
col1,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