符号
= 或 <- 或 -> | 指派 |
<<- 或 assign() | “超指派”操作符,函數内部定義全局變量 |
? / ?? / help() | Help, e.g. help("scan") |
demo() | |
example() | e.g. example(glm) |
methods() | e.g. methods(class="data.frame")檢視資料幀相應的通用函數;methods(plot)檢視plot函數能處理的類别 |
: | from:to,冒号優先級最高, e.g. x[1:3] |
==、!= | 等、不等 |
|、&、! | 或與非。 &和|逐個元素計算,&&和||對向量的第一個元素進行運算,必要時才比對第二個參數。(類似Java) |
NA | 不可得、值丢失 |
NaN | 非數值(Not a Number) |
NULL | (注意:要大寫),e.g. 删除21到24列dataA[21:24]<-list(NULL) |
%*% | 矩陣乘法 |
[[idx]] 重複中括弧 | 擷取嵌套其中的序列,如path[[m]][1]指第m個path序列(第m列)裡的第1個元素,幫助見?("[[") |
Lst$variable | 從清單或類似類型,擷取内部變量 |
... | 額外參數,将一個函數的參數傳遞給另一個函數 |
+ | 續行符 |
# | 注釋 |
TAB鍵 | 自動補齊 |
上下鍵 | 調用曆史指令 |
e.g.
a %*% t(a) #矩陣相乘
fun1 <- function(data, data.frame,graph=TRUE, limit=20, ...) {}
邏輯
if (條件) 表達式1 else 表達式2 |
ifelse(條件, yes, no) |
for (變量 in 向量) |
while(條件) |
repeat {} |
break; next(略過next後面的任務) |
is.na(); is.nan() |
mode(),判斷類型,包括:numeric / integer / double / complex / logical / character |
as.sth(),轉類型 |
e.g.
x = c(6:-4); sqrt(ifelse(x >= 0, x, NA))
for (i in 1:5) print (1:i)
while(i <= 5) {
+ print(1:i)
+ i = i+1
+ }
as.numeric(); as.character(); as.factor();as.matrix(); as.data.frame();as.integer; as.vector
操作
getwd() | 工作目錄 |
setwd() | |
source() | 批處理,e.g. source("exp.R") |
warning() | |
stop() | |
print() | |
formatC() | 數值作為字元串輸出 |
cat() | 字元串聯,可以插入\n(換行)及\t(tab鍵) |
paste() | 字元粘貼(非字元型自動轉換),sep=string:設定分隔符,預設空格 |
ls / objects | 顯示變量 |
rm() | 删除對象,e.g. rm(x,y); rm(list=ls()) |
proc.time() | 系統時間 |
head() | 讀取資料頭幾行 |
sink() | sink("file")後續的輸出由終端轉向一個外部檔案,sink()重新恢複到終端 |
q() | Quit |
删除包 | e.g. remove.packages("devtools") |
安裝包 | (1)e.g. install.packages("devtools") (2)download package, menu: packages -> install packages from local zip files 推薦(1),可以把dependent 的包也下載下傳下來。鏡像選China.beijing(第一個)最快。指令詳見: http://www.cnblogs.com/xianghang123/archive/2012/06/13/2547940.html |
安裝特定版本包 | Library(devtools); install_version() |
sessionInfo() | 檢視部分已安裝包版本 |
packageVersion() | 檢視所有已安裝包版本!e.g. packageVersion("git2r") |
help(package=””) | help(package="程式包名"),看R程式包裡到底有哪些函數 |
e.g.
formatC(1/3, format = "f", digits= 4)
paste(1:12) # 與as.character(1:12)等價
資料讀取
read.table() | 外部讀取,ASCII資料 read.table(“檔案名”,header=T 或者F,sep="分欄字元",quote="\"'") e.g. read.table("clipboard",header=T) |
read.csv() | 外部讀取,逗号分界符 |
read.delim() | 外部讀取,tab分界符 |
scan() | 大些的資料外部讀取,不受電腦記憶體限制 scan(file=“檔案名”,what=”complex”,sep=”分欄字元”) |
readLines() | 外部讀取網站, e.g. readLines("http://www.163.com") |
source() | 菜單: 檔案 > 運作R腳本檔案, e.g. source("commands.R") |
data.frame() | 内部建立 |
matrix() | 内部建立matrix(資料,行數,列數,byrow=T) |
注:若資料集很大(如1,000,000觀測x200變量),則可由ODBC聯接由資料庫讀入.e.g.
library(RMySQL) library(DBI) drv=dbDriver('MySQL') con=dbConnect(drv, dbname='data', user='tchou', password='password', host='localhost') data=dbGetQuery(con, 'select * from SHDATA') head(data) |
資料類型
一般類型
數值型(numeric) | 1,1.2,3.1415926 |
複數型(complex) | 1+2i |
字元型(character) | ‘A’/ “hello world!” |
邏輯型(logical) | TRUE / FALSE |
* str() 檢視資料類型
vector向量(序列)
一維,最為基本的類型,調用C語言運算,相對快些
c() | 最簡 |
seq() | 較簡,seq(from=value, to=value, by=value, length=value) |
rep() | 複雜,rep(x, times=value) 或rep(x, each=value) |
sequence(x) | 建立從1 開始以給定參數值結尾的連續整數序列 |
names() | 設定向量元素名字 |
numeric/character | 産生空向量,e.g. numeric() |
rule
1、向量的下标從1開始
2、負的下标去掉向量中對應的元素(正為提取)
3、支取向量邏輯關系代入索引中,e.g. x[!is.na(x)]
4、向量運算中的循環法則(recycling rule)
1:2 + 1:4

e.g.
seq(1,10,by=0.5); seq(1,10,length=5)
rep(2:5,2)
x[c(1,4)]; x[x<40&x>10]
fruit <- c(5,10,1); names(fruit) <-c("orange","banana","apple"); fruit
向量化(vectorization)
将一組指令向量化,調用C運算,提高效率
matrix(矩陣)
多元廣義上的向量
matrix() | |
dim() | |
rbind() | 上下合并矩陣 |
cbind() | 左右合并矩陣 |
t() | 轉置矩陣 |
e.g.
matrix(1:4,nr=2, byrow=TRUE)
x <- 1:14; dim(x) <- c(2,7)
list(清單)
包含任何類型的對象
e.g.
fl = list(x = 1:6, y = matrix(1:4, nrow =2))
fl$x; fl$y[2]; fl[1]; fl[[1]]; fl[[1]][2]
data frame(資料架構)
将許多向量組合起來的一個對象,它是二維的,通常其清單示變量,其行表示觀測。和矩陣類似的結構,但列可以為不同的對象。
進階應用有attach()、detach()、search()
e.g.
z.df=data.frame(cbind(INDEX = y, VALUE =x)) # INDEX和VALUE是重新命名的向量名字
z.df[1,]; z.df[1,2]
Q&A
(1)删除某一列的方法
Data$genome <- NULL # Data[2] <- NULL # Data[[2]] <- NULL
Data[1:2] <- list(NULL) # remove multiple columns
重命名某列
factor 因子
factor建立無序因子(e.g. factor(1:3,levels=1:5)),ordered建立有序因子,levels檢視levels
e.g.
province<-c("四川","湖南","江蘇","四川","四川","四川","湖南","江蘇","湖南","江蘇")
factor(province)
levels(factor(province)) # Levels: 湖南 江蘇四川
ordered(province) # Levels: 湖南 < 江蘇 < 四川
綜合
向量 | 一維 |
矩陣 | 多元 |
清單 | 一維複合資料類型 |
資料架構 | 多元複合資料類型 |
因子 | 分類變量 |
function(函數)
自定義函數
變量名 = function( 變量清單 ) 函數體
e.g.
fl = function(n) {
...
}
一般函數
length() | sum() | max() |
range() | prod() | abs() |
mean() | var() | sd() |
log() | exp() | sqrt() |
date() |
* range,即c(min(x),max(x))
* prod(x)給出x中所有元素的乘積
e.g.
sum(y<0.5) #個數和; sum(y[y<0.5]) #值和
文本函數
grep() | x=readLines("http://www.163.com") x[grep("<html", x):3] |
矩陣函數
lower.tri(matrix, diag=T) | 取右上半角矩陣 |
which() | 根據value逆取索引(注i從1開始) c(5,6,7,8,9,10,2,4,6) which(all==9|all==10) #result:5、6 |
solve(a,b) | (1)aX=b,求X (2)solve(a) 則aX=I,即求a的逆矩陣X |
diag(vector) | 建立機關矩陣 |
eigen() | 特征值:eigen(Sm)$values,特征向量:eigen(Sm)$vectors |
分布函數
rnorm() | 正态分布,rnorm(n,mean = 0, sd = 1) |
rexp() | 指數分布,rexp(n, rate = 1) |
rpois() | 泊松分布,rpois(n,λ) |
rbinom() | 二項式分布,rbinom(n, size, prob) |
runif() | 均勻分布,runif(n, min = 0, max = 1) |
rf() | F 分布Fisher-Snedecor,rf(n, df1, df2) |
rt() | t 分布,rt(n, df) |
e.g.
rnorm(30, 100, 0.1)
畫圖函數
plot() | 散點圖 |
abline() | 斜率一進制回歸圖 |
hist() | 直方圖 |
density() | 密度圖 |
Quantile-quantile (Q-Q)圖,檢測分布形态,e.g. qqnorm(x), qqline(x), qqplot(x,y) | |
points(x,y)、lines(x,y) | 低級繪圖指令用于進階繪圖 |
axis(side, . . . ) | 在目前圖形的指定邊上添加坐标 |
text() | 附上文本 |
參數估計
lsfit(), qr() | 最小二乘拟合 |
假設檢驗
var.test() | F檢驗, e.g. var.test(height~gender, data=UG) |
t.test() | T檢驗, e.g. t.test(UG$weight, mu=170, alternative="less") |
chisq.test() | 卡方檢驗, e.g. chisq.test(f,p=prob) |
回歸
Glm.logit回歸 | logit.glm<-glm(y~x1+x2+x3,family=binomial,data=d5.1) summary(logit.glm) |
Gam回歸 | library(mgcv) gam(Overall ~ s(Income, bs = "cr"), data = d) # s() 樣條函數, cr 三次樣條 gam(Overall ~ Income + Edu + Health, data = d) # 此時與glm一樣 gam(Overall ~ s(Income) + s(Edu) + s(Health), data = d) Overall ~ s(Income) + s(Edu) + Health s(Girth,Height) #Girth 和 Height 不獨立,存在互相影響 |
共線性
step() | 逐漸回歸分析,e.g. step(sj_lm,direction="both") # both向前向後檢驗 |
預測
predict() | e.g. predict(logit.step, data.frame(x1=1)) |