1.下載與安裝
下載:官方網(wǎng)站
安裝:雙擊下一步完成安裝。
安裝后只有8個(gè)基本的模塊,一些功能需要安裝擴(kuò)展程序包(簡(jiǎn)稱擴(kuò)展包)。
R語言擴(kuò)展包的三種安裝方式:
- 菜單方式:R語言工具欄【Packages】->【Load package】,從已有的程序包中選定一個(gè)需要的進(jìn)行加載;
- 命令方式:用函數(shù)install.packages(),如:在控制臺(tái)中輸入install.packages("lmtest")。
- 本地安裝:在官方網(wǎng)站下載所需要的擴(kuò)展包,在R語言工具欄中【Packages】->【Install package from local zip files...】
擴(kuò)展包安裝后只能載入內(nèi)存才能使用,載入內(nèi)存的方式有以下幾種:
1.菜單方式:R語言工具欄【Packages】->【Load package】,從已有的程序包中選定一個(gè)需要的進(jìn)行加載;
2.library()進(jìn)行加載:如library(lmtest)
2.數(shù)據(jù)錄入
- 可以以向量,矩陣,列表和數(shù)據(jù)框等形式輸入數(shù)據(jù);
- 一般在其他軟件中錄入數(shù)據(jù),然后將數(shù)據(jù)讀入到R語言中,常用Excel;
- xlsx轉(zhuǎn)換到csv文件
- rc=read.csv("xxx.csv")
- read.csv命令只是將數(shù)據(jù)以數(shù)據(jù)框的形式讀到R語言,第一行作為變量名
- 要直接調(diào)用變量,使用attach(rc)
3.R語言的運(yùn)算
| 運(yùn)算 | 符號(hào) | 說明 | 例子 |
|---|---|---|---|
| 四則運(yùn)算 | +,-,*,/,^ | 優(yōu)先級(jí)與數(shù)學(xué)法則相同 | 6+5*3^2,結(jié)果51 |
| 賦值運(yùn)算 | <-,=,-> | 根據(jù)個(gè)人喜好而定 | x=9 |
| 函數(shù)運(yùn)算 | functionname() | sqrt(16);abs(-6); | -- |
| 關(guān)系運(yùn)算 | <,<=,==,>,>=,!= | 結(jié)果TRUE或FALSE | -- |
| 邏輯運(yùn)算 | &,|,! | -- | -- |
R語言需要注意的點(diǎn):
- 區(qū)分大小寫
- 變量名稱第一個(gè)為字母,應(yīng)包括字母,數(shù)字,下劃線和點(diǎn)
- 代碼之間可用“;”分割,或起新行
- 注釋以“#”開頭
- 只認(rèn)識(shí)半角符號(hào),全角不識(shí)別
4.R常用數(shù)據(jù)結(jié)構(gòu)
4.1向量
- 向量的生成
- 一般向量的生成:
x=c(8.2,3.7,4.5,5.6,7.3),
用c()函數(shù)完成向量的合并:c(x,0,1,3)- 生成步長(zhǎng)為1的向量,
用“:”符號(hào),如1:5,5:1- 生成等差向量:
seq(from=value1, to=value2, by=value3)
seq(-2, 2, 0.5)
生成重復(fù)向量
rep(x, times=n)
x=1:3
rep(2,3);rep(x,3)產(chǎn)生空向量
x<-NULL
- 向量的運(yùn)算
+,-,*,/,^對(duì)應(yīng)加,減乘除和乘方運(yùn)算,是對(duì)向量的每一個(gè)元素進(jìn)行相應(yīng)的運(yùn)算:
x=c(1,3,5);y=c(2,4,6)
x+y;x-y;x*y;x/y;x^2
內(nèi)積用x%*%y表示;
- 向量的元素和子向量的提取
x[i],i為具體數(shù)字,從1到N排序;
x[v], v可以是c()生成的向量;
x[-i], i為具體數(shù)字,此為去掉第i個(gè)元素后的向量;
- 與向量有關(guān)的函數(shù)
| 函數(shù)名 | 功能 |
|---|---|
| length | 計(jì)算向量的長(zhǎng)度 |
| min | 向量中最小的元素 |
| max | 向量中最大的元素 |
| sum | 向量各元素之和 |
| prod | 向量各元素的連乘積 |
例如:
x=c(1,5,7,3)
length(x);min(x);max(x);sum(x);prod(x)
4
1
7
16
105
4.2矩陣
- 矩陣的生成
有很多方法,這里只介紹matrix()函數(shù),格式如下:
matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
- data為向量數(shù)據(jù)
- nrow是矩陣行數(shù)
- ncol是矩陣列數(shù)
- byrow=TRUE,生成矩陣按照行放置,F(xiàn)ALSE按列放置;
- dimnames設(shè)置矩陣行列名稱的參數(shù),缺省時(shí)不設(shè)置
A=matirx(1:20,nrow=4,ncol=5)
B=matrix(1:20,nrow=4,ncol=5,byrow=T)
A;B
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
- 矩陣的運(yùn)算
- 矩陣的四則運(yùn)算
A=matrix(1:9,nrow=3,byrow=T)
B=matrix(2:10,nrow=3,byrow=T)
A;B;A+B;A-B;A*B;A/B
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[,1] [,2] [,3]
[1,] 2 3 4
[2,] 5 6 7
[3,] 8 9 10
[,1] [,2] [,3]
[1,] 3 5 7
[2,] 9 11 13
[3,] 15 17 19
[,1] [,2] [,3]
[1,] -1 -1 -1
[2,] -1 -1 -1
[3,] -1 -1 -1
[,1] [,2] [,3]
[1,] 2 6 12
[2,] 20 30 42
[3,] 56 72 90
[,1] [,2] [,3]
[1,] 0.500 0.6666667 0.7500000
[2,] 0.800 0.8333333 0.8571429
[3,] 0.875 0.8888889 0.9000000
- 矩陣的數(shù)乘運(yùn)算和乘法運(yùn)算
A=matrix(1:12,nrow=3,byrow=T)
B=matrix(12:1,nrow=4,byrow=T)
A;B;2*A;A%*%B
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[,1] [,2] [,3]
[1,] 12 11 10
[2,] 9 8 7
[3,] 6 5 4
[4,] 3 2 1
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 10 12 14 16
[3,] 18 20 22 24
[,1] [,2] [,3]
[1,] 60 50 40
[2,] 180 154 128
[3,] 300 258 216
- 矩陣的元素,行列向量及子矩陣的提取
A[u,v],u為行數(shù)或向量,v為列數(shù)或向量,u或v省略時(shí),提取所有的行與列。
例如:
A=matrix(1:12,nrow=3,byrow=T)
A;A[3,2];A[1,];A[2,];A[1:3,3:4];A[c(1,3),c(3,2)]
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[1] 10
[1] 1 2 3 4
[,1] [,2]
[1,] 3 4
[2,] 7 8
[3,] 11 12
[,1] [,2]
[1,] 3 2
[2,] 11 10
- 與矩陣有關(guān)的常用函數(shù)
| 函數(shù)名 | 功能 |
|---|---|
| t | 求矩陣的轉(zhuǎn)置 |
| det | 求方陣的行列式 |
| diag | 對(duì)象為向量,生成對(duì)角矩陣;對(duì)象為矩陣,則返回對(duì)角線 |
| solve | A為方陣,b為向量,solve(A)計(jì)算逆,solve(A,b)解線性方程組AX=b |
| cbind | 按列合并A,B矩陣 |
| rbind | 按行合并A,B矩陣 |
| apply | apply(A,MARGIN,FUN,...),A是矩陣,MARGIN=1對(duì)行計(jì)算,2為列,F(xiàn)UN是用來計(jì)算的函數(shù); |
A=matrix(c(1:8,10),nrow=3,byrow=T);
b=c(2,5,10)
A;t(A);det(A);diag(A);diag(b);solve(A);solve(A,b);apply(A,1,sum)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 10
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 10
[1] -3
[1] 1 5 10
[,1] [,2] [,3]
[1,] 2 0 0
[2,] 0 5 0
[3,] 0 0 10
[,1] [,2] [,3]
[1,] -0.6666667 -1.333333 1
[2,] -0.6666667 3.666667 -2
[3,] 1.0000000 -2.000000 1
[1] 2 -3 2
[1] 6 15 25
- 存儲(chǔ)向量的矩陣
> m<-matrix(list(),2,2)
> m[1,1][[1]]<-1:2
> m[1,2][[1]]<-1:3
> m[2,1][[1]]<-1:4
> m[2,2][[1]]<-1:5
> m[1,2]
[[1]]
[1] 1 2 3
> m[1,2][[1]]
[1] 1 2 3
> m
[,1] [,2]
[1,] Integer,2 Integer,3
[2,] Integer,4 Integer,5
4.3列表
列表相當(dāng)于Python中的哈希數(shù)組
- 列表的定義
list(name="James",height=2.03,no.children=2,child.ages=c(11,8))
$name
[1] "James"
$height
[1] 2.03
$no.children
[1] 2
$child.ages
[1] 11 8
- 列表的元素與子列表的提取
L=list(name="James",height=2.03,no.children=2,child.ages=c(11,8))
L[[1]];L[[4]];L$height
[1] "James"
[1] 11 8
[1] 2.03
- 存儲(chǔ)向量的列表
> my_list<-list()
> my_list[[1]]<-c(1:5)
> my_list[[2]]<-c(6:11)
> my_list
[[1]]
[1] 1 2 3 4 5
[[2]]
[1] 6 7 8 9 10 11
4.4數(shù)據(jù)框
數(shù)據(jù)框是R語言的一種數(shù)據(jù)結(jié)構(gòu),通常為矩陣形式,但矩陣各列可以是不同類型;每列是一個(gè)變量,每行都是某個(gè)具體對(duì)象在各個(gè)變量上的一組觀測(cè)值。
- 數(shù)據(jù)框的生成
調(diào)用data.frame(),如下:
sjk=data.frame(Name=c("zhang hua","wang li","Du juan"),class=c("t1",'t2','t3'),score=c(80,60,90))
> sjk
Name class score
1 zhang hua t1 80
2 wang li t2 60
3 Du juan t3 90
- 數(shù)據(jù)框的元素與子數(shù)據(jù)框的提取
- 采用類似矩陣元素與子矩陣提取方式;
- 數(shù)據(jù)框名$元素名
> sjk[2:3,c(1,3)];sjk$score
Name score
2 wang li 60
3 Du juan 90
[1] 80 60 90
- 數(shù)據(jù)框變量的調(diào)用和attach()函數(shù)
如果感覺用“數(shù)據(jù)框$元素名”麻煩,可用attach將元素名直接調(diào)入內(nèi)存;
> attach(sjk);score
[1] 80 60 90
? 取消變量的連接可用detach()函數(shù)。
- dataframe刪除行列
a<-data.frame(x=c(2,5,9,4,8,7),y=c(3,4,6,4,1,2))
> a
x y
1 2 3
2 5 4
3 9 6
4 4 4
5 8 1
6 7 2
> a[-1,]
x y
2 5 4
3 9 6
4 4 4
5 8 1
6 7 2
> a[,-1]
[1] 3 4 6 4 1 2
4.5因子
R語言中一類特殊的對(duì)象,主要目的為了表達(dá)與說明定性變量的取值。
生成因子最基本的函數(shù)是factor(),如:
> sex=c("M","F","M","M","F")
> sexf=factor(sex);
> sexf
[1] M F M M F
Levels: F M
產(chǎn)生一些規(guī)律的因子,還經(jīng)常使用gl()函數(shù),函數(shù)格式為:
gl(n,k,length=n*k,labels=1:n,ordered=FALSE)
n:水平數(shù)
k:重復(fù)次數(shù)
length:結(jié)果的長(zhǎng)度;
labels:是一個(gè)n維向量,表示因子水平;
ordered:是邏輯變量,表示是否為有序因子,缺省值為FALSE。
> gl(3,5)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3
> gl(3,1,15)
[1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
Levels: 1 2 3
5 R程序設(shè)計(jì)
5.1條件語句
- if else
if(cond) {state}
if(cond1) {state1} else if(cond2) {state2} else {state3}
> if(x>1) {y=x^2+1} else {y=2*x}
> x
[1] 2
> y
[1] 5
5.2循環(huán)語句
- for
for(name in expr_1) {expr_2}
name是循環(huán)變量,expr_1是個(gè)向量,通常為序列,如1:20等;
expr_2為一組表達(dá)式
> A=matrix(0,nrow=3,ncol=3)
> for(i in 1:3) { for(j in 1:3) {A[i,j]=1/(i+j)}};
> A
[,1] [,2] [,3]
[1,] 0.5000000 0.3333333 0.2500000
[2,] 0.3333333 0.2500000 0.2000000
[3,] 0.2500000 0.2000000 0.1666667
- while
while(cond) {expr}
> year=0;a=10000
> while(a<20000) {a=a*(1+11.25/100); year=year+1};
> year;a
[1] 7
[1] 21091.14
5.3函數(shù)
函數(shù)定義
name=function(arg1,argt2,...) {expr}
expr為一組R語言表達(dá)式
> f=function(x){
+ if(x>1) {
+ y=x^2+1}
+ else {
+ y=2*x}
+ y
+ }
> f(0);f(1);f(2)
[1] 0
[1] 2
[1] 5
- 和verilog一樣,參數(shù)按順序傳,如不按順序,則“name=object"方式傳參;
- 參數(shù)可以設(shè)置為默認(rèn)值;