R語言


快捷鍵

1. Ctrl + Shift + F10 to restart your R session

2.  Ctrl +O:打開文件

3.  Ctrl + Shift+C  :加標記#

4.  Ctrl + Shift+N  :創建新文本簿

 

1.r語言中= ,<-功能是相同,有時候=會出錯,所以用<-。但是從字面上解釋,通常“<-”被認為是賦值,”=”是傳值。
2.在函數調用中,func(x=1)與func(x<-1)是有區別的,前者調用完后變量x不會被保留,而后者會在工作區里保留變量x=1。
3.初始化:

初始化

3.1使用data.frame函數就可以初始化一個Data Frame。比如我們要初始化一個student的Data Frame其中包含ID和Name還有Gender以及Birthdate,那么代碼為:

student<-data.frame(ID=c(11,12,13),Name=c(“Devin”,”Edward”,”Wenli”),Gender=c(“M”,”M”,”F”),Birthdate=c(“1984-12-29”,”1983-5-6”,”1986-8-8”))

3.2另外也可以使用read.table() read.csv()讀取一個文本文件,返回的也是一個Data Frame對象。讀取數據庫也是返回Data Frame對象。

查看student的內容為:

 
4.數據標准化:

scale(data, center=T,scale=T) #數據標准化
1)center和scale默認為真,即T或者TRUE
2)center為真表示數據中心化
3)scale為真表示數據標准化

  讀取數據:

library(xlsx)

ray = read.xlsx('F:/R編輯器/student.xlsx',1,encoding="UTF-8")

文件中含有中文,必須加上:encoding="UTF-8"。不然會出現亂碼。

 

聚類分析:對樣品或指標進行分類的一種分析方法,依據樣本和指標已知特性進行分類。本節主要介紹層次聚類分析,一共包括3個部分,每個部分包括一個具體實戰例子

r語言使用dist(x, method = "euclidean",diag = FALSE, upper = FALSE, p = 2) 來計算距離。其中x是樣本矩陣或者數據框。method表示計算哪種距離。method的取值有:
euclidean                歐幾里德距離,就是平方再開方。
maximum                切比雪夫距離
manhattan            絕對值距離
canberra                Lance 距離
minkowski            明科夫斯基距離,使用時要指定p值
binary                    定性變量距離.
定性變量距離: 記m個項目里面的 0:0配對數為m0 ,1:1配對數為m1,不能配對數為m2,距離=m1/(m1+m2);
diag 為TRUE的時候給出對角線上的距離。upper為TURE的時候給出上三角矩陣上的值。

r語言中使用scale(x, center = TRUE, scale = TRUE) 對數據矩陣做中心化和標准化變換。
如只中心化 scale(x,scale=F) , 

r語言中使用sweep(x, MARGIN, STATS, FUN="-", ...) 對矩陣進行運算。MARGIN為1,表示行的方向上進行運算,為2表示列的方向上運算。STATS是運算的參數。FUN為運算函數,默認是減法。下面利用sweep對矩陣x進行極差標准化變換

1

2

3

>center <- sweep(x, 2, apply(x, 2, mean)) #在列的方向上減去均值。

>R <- apply(x, 2, max) - apply(x,2,min)   #算出極差,即列上的最大值-最小值

>x_star <- sweep(center, 2, R, "/")#把減去均值后的矩陣在列的方向上除以極差向量

 

1

2

3

>center <- sweep(x, 2, apply(x, 2, min)) #極差正規化變換

>R <- apply(x, 2, max) - apply(x,2,min)

>x_star <- sweep(center, 2, R, "/")

2)層次聚類法

層次聚類法。先計算樣本之間的距離。每次將距離最近的點合並到同一個類。然后,再計算類與類之間的距離,將距離最近的類合並為一個大類。不停的合並,直到合成了一個類。其中類與類的距離的計算方法有:最短距離法,最長距離法,中間距離法,類平均法等。比如最短距離法,將類與類的距離定義為類與類之間樣本的最段距離。。。
r語言中使用hclust(d, method = "complete", members=NULL) 來進行層次聚類。
其中d為距離矩陣。
method表示類的合並方法,有:
single            最短距離法
complete        最長距離法
median        中間距離法
mcquitty        相似法
average        類平均法
centroid        重心法
ward            離差平方和法

?

1

2

3

4

5

6

7

8

> x <- c(1,2,6,8,11)      #試用一下

> dim(x) <- c(5,1)

> d <- dist(x)

> hc1 <- hclust(d,"single")

> plot(hc1)

> plot(hc1,hang=-1,type="tirangle")         #hang小於0時,樹將從底部畫起。

#type = c("rectangle", "triangle"),默認樹形圖是方形的。另一個是三角形。

#horiz  TRUE 表示豎着放,FALSE表示橫着放。

7

 

1、常規聚類過程:


一、首先用dist()函數計算變量間距離
dist.r = dist(data, method=" ")
其中method包括6種方法,表示不同的距離測度:"euclidean", "maximum", manhattan", "canberra", "binary" or "minkowski"。相應的意義自行查找。

 

二、再用hclust()進行聚類
hc.r = hclust(dist.r, method = “ ”)
其中method包括7種方法,表示聚類的方法:"ward", "single", "complete","average", "mcquitty", "median" or "centroid"。相應的意義自行查找。

 

三、畫圖
plot(hc.r, hang = -1,labels=NULL) 或者plot(hc.r, hang = 0.1,labels=F)
hang 等於數值,表示標簽與末端樹杈之間的距離,
若是負數,則表示末端樹杈長度是0,即標簽對齊。
labels 表示標簽,默認是NULL,表示變量原有名稱。labels=F :表示不顯示標簽。

 

實例介紹

 

 

 

 

 

 

 

 

特殊情況用法:

當用已知距離矩陣進行聚類時,即變量間的距離已經計算完,只是想用
已知的距離矩陣進行聚類。這時,需將距離矩陣轉成dist類型。
然后再執行hclust()聚類和plot()畫圖。

 

# mydata作為距離矩陣,且為正方矩陣

mydata<-matrix(1:25,ncol=5);

class(mydata);

 

# 把mydata變成dist類型

mydist<-as.dist(mydata);

class(mydist);

[1] "dist"

 

myhc<-hclust(mydist,method="complete");

myhc;

 

Call:

hclust(d = mydist, method ="complete")

 

Cluster method   : complete

Number of objects: 5

 

plot(myhc,hang=0.1)

 

 

2、熱圖聚類過程:


一、首先用dist()函數計算變量間距離
dist.r = dist(data, method=" ")

 

二、用heatmap()函數進行熱點圖聚類
對於heatmap中具體參數,這里不做過多介紹,可在幫助文檔中找說明。除此heatmap函數之外,gplots包中的heatmap.2()函數,也可以做熱點圖聚類。


其中參數不做過多描述。若有需求,請分享並回復:heatmap.2

即可得到答案。

實戰例子:

 

require(graphics);

dist.r<-dist(USArrests,method="euclidean") # 方法:歐氏距離

dist.r

 

 

#聚類並畫圖

heatmap(as.matrix(dist.r))

 

 

3、多維標度和聚類的結果


MDS方法對距離矩陣進行降維,用不同的顏色來表示聚類的結果。
另一種聚類效果展示。

 

例子:

 

 

 

 

 

 

系統聚類: 

library(xlsx)

mydata=read.xlsx('F:/R編輯器/student.xlsx',1,encoding="UTF-8")

head(mydata)

rownames(mydata)=mydata$科目

mydata=mydata[,-1]

head(mydata)

result=dist(mydata, method = "euclidean")

m=c("complete")

h=list();par(mfrow=c(2,4))

for(i in 1:length(m)){

   h[[i]]=hclust(dist(scale(mydata)),method =m[i])

   plot(h[[i]],lables=rownames(mydata),cex=2,

     main=paste("Method: ",m[i]))

}

 

5、對普通的畫圖為

 

plot(number, count, yaxt="n", xaxt="n",xlab="x 軸名字",type="b")

 

上述表示為:yaxt xaxt都是將數據軸的標度和標度值完全去掉,但是可以設置軸的名字,后面設置標度和標度值使用:

 

axis(side=1, at=c(1,3,5,6,7), lables=(ni, hao, a , man, go));等均可匹配,at表示刻度值范圍。

 

但是有個問題就是太擁擠的不可見怎么縮小y軸的尺寸,而縮小尺寸值是在axis()命令設置at這個參數的時候就設置,使用cex.axis=0.5就表示縮小一半。而當直接使用默認的坐標刻度的時候,那么就在plot中直接放cex.axis=0.5即可。同樣兩個地方可以用的有:cex.lab=0.5 只縮放坐標軸的名稱。 cex.main=0.只縮放主標題  cex.sub只縮放副標題。

 

當然上述除了axis要設置at值,還有par函數,但是該函數主要是作用於整個畫布環境,設置完后,不會對當前已經顯示的影響,而只會影響后面重新生成的圖片。可以設置,par(cex.axis=0.5, )

 

 

 

其中設置畫布大小的為:par(pin(11,7))是目前自己試出來的最大畫布。

 

 

runif()函數,隨機數的產生,均勻分布隨機數

R語言生成均勻分布隨機數的函數是runif()

句法是:runif(n,min=0,max=1)    n表示生成的隨機數數量,min表示均勻分布的下限,max表示均勻分布的上限;若省略參數min、max,則默認生成[0,1]上的均勻分布隨機數。

正態分布隨機數的生成函數是 rnorm()

句法是:rnormn,mean=0,sd=1  其中n表示生成的隨機數數量,mean是正態分布的均值,默認為0sd是正態分布的標准差,默認時為1;

 

 

 

 

 

 

 

五、apply()函數

      apply函數族是R語言中數據處理的一組核心函數,通過使用apply函數,我們可以實現對數據的循環、分組、過濾、類型控制等操作。

 

 

 

apply函數是最常用的代替for循環的函數。apply函數可以對矩陣、數據框、數組(二維、多維),按行或列進行循環計算, 對子元素進行迭代,並把子元素以參數傳遞的形式給自定義的FUN函數中,並以返回計算結果。

apply(X, MARGIN, FUN, ...)

參數列表:

    • X:數組、矩陣、數據框
    • MARGIN: 按行計算或按按列計算,1表示按行,2表示按列
    • FUN: 自定義的調用函數
    • …: 更多參數,可選.例:apply(X,2,sum)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM