1. 程式人生 > >R語言初學指南(筆記)

R語言初學指南(筆記)

R語言的下載地址(Windows版本):http://ftp.ctex.org/mirrors/CRAN/

R語言的安裝,需要額外安裝mikTex,Rtools,htmlhelp:

R:D:\Program Files\R\R-3.0.3
mikTex:D:\Program Files\MiKTeX 2.7
Rtools:d:\Rtools
htmlhelp:D:\Program Files\htmlhelp

Path需要配置如下:
d:\Rtools\bin;D:\Rtools\gcc-4.6.3\bin;d:\Rtools\MinGW\bin;D:\Program Files\htmlhelp
;D:\Program Files\MiKTeX 2.7\miktex\bin;


Log(2), log10(2)

boxplot(count ~ spray, data = InsectSprays,col="lightgray")

載入包library(MASS)

q(),退出R,但是強烈建議在詢問是否儲存工作空間時,不要把它儲存在預設目錄下,如果這樣做,當R重新啟動時會自動載入所有的結果。

q(save=”no”) R不做儲存直接退出。

改變預設工作目錄:setwd(file=”c:\\doc\\”)

我們推薦把R程式碼儲存在文字比機器中而不要儲存在你的工作空間中。下次使用時,開啟編輯好的存檔檔案,複製程式碼並把它黏貼到R裡。

Extending the linear Models with R

citation("lattice")

R允許在一個變數中儲存多個值,這個任務由c()函式來完成,c代表Concatenate

arr = c(22,33,44,55)

arr[1],arr[1:5]

arr[-2]表示檢視除了第二個值之外的其他值。

R有很多內建函式:sum,mean,max,min,median,var和sd等等。

R中變數名可以是s.win的形式,”.”也屬於變數的一部分。

R中的變數名最好使用大寫字母開頭,這樣可以避免將它和一些內部函式名混淆。

Sum(arr,na.rm=TRUE)將忽略掉資料中的NA項。

Rep(c(1,2,3,4),each=8),重複輸入值1-4,每個8次。

Seq(from=1,to=4,by=1)和1:4的效果一樣。

Cbind函式將所結合的變數以列的形式輸出。

Dim(Z)可以輸出Z的維數。

Rbind函式具有

http://www.xplatform.co.kr:8080/edu/xp/employees_select.jsp

 

W = vector(length=8)

Vector函式的優點是我嗎可以事先定義向量的長度,在做迴圈運算就比較有用。

Dmat = matrix(nrow=8,ncol=4) //生成8*4的矩陣。

as.matrix(cbind(a,b,c,d))可以通過這種方式生成

is.matrix返回是否是矩陣。

對於矩陣A和B專門的操作符還有進行轉置運算的t(A),進行矩陣的乘法的A %*% B,求逆矩陣的solve(A)等。

線性代數,n元序列的逆序和對換:

大的數排在小的數前,則成為逆序,一個排列的逆序個數的總和就稱為這個排列的逆序數。

排列的逆序為奇數偶數,則稱此排列為奇排列偶排列。

定理:一次對換改變排列的奇偶性。奇數次對換改變奇偶性,偶次對換奇偶性不變。

推論2,全體n元排列的集合中,奇排列與偶排列各一半。

行列式與轉置行列式相等。

若行列式的第i行(列)的每一個元素都可以表示為兩數之和,則行列式可表示成兩個行列式之和。

用一個數乘行列式,等於將行列式的某一行(列)元素都乘以K

若對換行列式的任意兩行(列),則行列式變號。

推論,若行列式的兩行(列)相同,則行列式為零。兩行(列)元素成比列,則行列式為零。

把行列式的第j行(列)元素的K倍加到第i行(列)的對應元素上,行列式的值不變。

我們可以使用資料框結合具有相同長度的變數,而資料框的每一行包含有同一樣本的不同觀察值。這一點上它和matrix或者cbind函式是比較類似的。

Dfrm = data.frame(WC=wingcrd,TS=tarsus,hd=head,w=wt)

移除變數rm(變數)

List函式結合資料。

Lst = list(x1=x1,x2=x2)

List裡邊的內容通過入Lst$x1,Lst$x2來訪問。引入list函式的原因是因為幾乎所有R中的函式(比如線性迴歸,廣義線性模型,t-檢驗等等)的輸出結果都是儲存在列表中的。

資料的載入:

一般情況下有兩種將資料從Excel(或電子資料表、資料框程式)載入R的方法。

第一種方法:將EXCEL資料準備好後,將其提取到製表符分割的Ascii檔案中,關閉Excel,使用read.table函式將資料載入到R中。第二種方法是一個專門的R程式包,RODBC,可以訪問Excel中選定的行和列。

read.table(file="D:\\R\\user.txt",header=TRUE)

R認為ascii文字檔案中的資料實用點作為小數點,事實上,其還有一個屬性dec=”.”,如果要使用逗號作為小數點,可以使用dec=”,”。

Scan也可用於匯入檔案,在資料都是數值的情況下,scan執行更快。

訪問或者載入資料庫中的資料都是比較簡單的,R提供了快速訪問任何型別資料庫的一些工具:

Library(RODBC)。當驅動程式存在於主系統是,程式包應用標準資料庫實施開放式資料庫連線ODBC。安裝資料庫程式包時設定必要地驅動程式是很重要的。

假定已安裝了正確的驅動程式,可以使用odbcConnectAccess命令來建立一個與Microsoft Access資料庫的連線:

Chanel = odbcConnectAccess(file=”mydb.mdb”,uid=””,pwd=””)

獲取表:sqlFetch(channel,”MyTable”);

sqlQuery(channel,querysentense);

Windows使用者可以使用odbcConnectExcel直接連線Excel中的電子資料表,並且從任意表單中選擇行和列。

Str(結構)命令告訴我們資料框中每個變數的屬性。

Names(a)檢視載入的資料的header; str(a)檢視其結構。

訪問資料框中變數最有效的方法如下。確定R中的一個函式,例如,線性迴歸桉樹lm;

也可以使用a$Age方式去訪問。

如果我們想使用Age資料集中的某個變數,每次都輸入a$時繁瑣的。使用attach命令可以避免這樣的麻煩。

Attach(a)後就可以直接訪問Age變數。

Detach命令與attach命令相反。

Unique(a$sex)可以檢視變數sex的變數有多少個唯一值。

1如果表示雄性,要訪問所有的雄性資料:

Sel = a$sex == 1 //生成一個向量Sel與變數Sex具有相同的長度

Am = a[Sel,]

&是布林和運算子。

資料排序:

Ord1 = order(a$age)

A[Ord1,]

 

R有一個有用的工具能合併檔案,即merge函式。

Amerge = merge(a1,a2,by=”Sample”);

All屬性如果配置為TRUE,如果sq1裡沒有sq2裡出現的樣本資料,將用NAs填充。

輸出資料:write.table命令。

write.table(a,file="d:/R/output.txt",sep="",quote=FALSE,append=FALSE,na="NA")

重新編碼分類變數:如sex不要1和2,需要F和M表示,可以增加新列:

A$fSex = factor(a$sex)

A$fSex = factor(a$sex,levels=c(1,2), labels=c(“M”,”F”)

boxplot(Age ~ Id, data = a)

M1 = lm(Age ~ Id, data = a)

M2 = lm(Age ~ factor(Id), data = a)

除了命令factor,你也可以使用as.factor。為了把因子轉換成數值向量,可以使用as.numeric。這在畫圖時把雄性和雌性繪製不同的顏色隨是很有用的。

R提供了計算單變數、多變數或觀察值子集的均值、長度、標準差、最小值、最大值、方差等的函式。

tapply(a$Age,a$arr,mean),Age列根據arr列進行group求mean。

tapply(a$Age,a$arr,sum), Age列根據arr列進行group求sum。

完整的來看,是tapply(X = a$Age, INDEX=a$arr, FUN=mean)

我還可以對其求標準差(sd函式),方差(var函式),長度(length函式)等操作。

Sapply(a[,5:24],FUN=mean)對資料框a的5-24列進行求平均。

需要注意的是tapply函式計算的是一個變數觀察值子集的均值,而lapplysapply函式計算的是一個或多個變數全部觀察值的均值(或其它函式)

Lappy和sapply的不同,前者輸出列表,後者輸出向量。

Lapply和sapply中包含資料的變數必須是資料框。如cbind命令的輸出不是資料框,可以使用data.frame來使得其變為資料框。注意到這樣做我們將丟失變數標籤。我們可以在cbind函式結合完資料後再用colnames函式來加上標籤。

 

另一個可以提供變數資訊的函式式summary命令,它的引數可以是一個變數,cbind命令的輸出,或者資料框。

Table(a$age)用來不同age上的記錄的數量。

table(a$sex,a$Age)檢視sex,age組合各自的記錄的數量。

plot(a$Id,a$Age)

對圖形最常見的修改是新增標題和x,y軸標籤以及設定x,y軸座標界限。這個可以通過擴充套件繪圖命令完成:

plot(a$Id,a$Age,xlab="User Id",ylab="User Age", main="Id Age Plot",

+ xlim=c(1000,1100),ylim=c(15,25))

也可以用xlim = c(min(a$Id,na.rm=TRUE),

                    Max(a$Id,na.rm=TRUE))

 

改變繪圖字元:預設使用空心圓作為繪圖字元,但其可以從另外20多個符號中選擇。Pch選項制定繪圖字元,預設值為1.

改變繪圖符號的顏色:col屬性 col=3為綠色。

改變繪圖符號的尺寸:cex選項

 

新增一條平滑線:

Plot完成後,使用如下命令:

M.loess = loess(Id ~ Age, data = a)

> Fit = fitted(M.loess)

> lines(a$Age,Fit)

 

R起碼有兩個包可以方便獲取全球範圍內的股票資料:
quantmod
tseries
我更喜歡後者:data_ts<-get.hist.quote(instrument='601398.ss',start='2008-05-10',end='2010-03-20')
quantmod的作圖比較猛。

這些包應該也是通過抓取相關網站的HTML/XML分析得出資料的。

 

儲存影象JPEG

jpeg(file="D:\\R\\user.jpeg")

>plot(User$Id,User$Age)

>dev.off()

 

可以使用paste命令來連線兩個字串,並且之間不加空格。

Paste(Nest.i,”.jpg”,sep=””)

 

For迴圈for(I in 1:27){

}

for(iin 1:27){

 print(i)

 }

 

迴圈矩陣:


nD=dim(User)

nRow= vector(length = nD[1])

for(iin 1:nD[1]){

 nRow[i] = User[i,1]+User[i,3]

 }

在執行統計分析前,查詢並處理所有的缺失值是非常重要的,因為它們經常回帶來一些困難。某些方法,例如線性迴歸,將會移除所有包含有缺失值的情形(觀察值)。

 

自定義函式:

NAPerVariable<- function(X1){

       D1 = is.na(X1)

       colSums(D1)

}

這時候就可以通過NAPerVariable(User[,])來呼叫函數了。

colSums(D1)命令的輸出結果是每個變數的缺失值個數。而rowSums可以得出每個觀察值缺失值的個數。

判斷0的個數:

ZerosPerVariable<- function(X1){

       D1 = (X1 == 0)

       colSums(D1,na.rm=TRUE)

}

設定函式引數中變數的預設值,如:

VariableInfo= function(X1, Choice1 = “Zeros”)

 

Print(“Youmade a error”)打印出錯誤。

 

Ifelse命令可以用來替代if命令:

Ifelse(Choice1== “Zeros”, D1 = (X1==0),D1 = is.na(X1))

 

計算夏農指數:

RS= rowSums(Species, na.rm=TRUE)

Pro= Species / RS

H= -rowSums(prop * log10(prop), na.rm = TRUE)

 

給資料加上標籤:

Names(User) = users[,1]

 

 

圖形工具:

餅圖,Pie

Par函式:mfrow = c(2,2)生成一個具有4個面板的圖形視窗。把c(2,2)改成c(1,4)或者c(4,1)會生成一行(或列)4個餅圖。Mar選項制定每個圖形周圍空白的大小。空白定義為四側邊緣的線的數目,底部、左側、頂部、右側。各自的預設值分別是c(5,4,4,2)+0.1.增加這些值將會出現更多空白。

條形圖:barplot

繪畫箭頭:

Bp= barplot(…

arrows(bp,….)

box()

帶形圖:stripchart

盒圖:boxplot

Text函式和aixs函式。

R函式pairs可以用來生成多面板散點圖。

Pie,pie3D,par,barplot,arrows,box,boxplot,text,points.

Legend,title,expression,pairs,coplot

格包:R中提供了很多可以對各種特殊型別資料進行繪圖的函式。格包可以使R調動全部的潛能來對各種高維資料進行繪圖。