天天看點

R語言基礎總結

符号

= 或 <- 或 -> 指派
<<- 或 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 

R語言基礎總結

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() 密度圖
qq 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))