R语言课程资料
第一節(jié) R語(yǔ)言簡(jiǎn)介
- R語(yǔ)言簡(jiǎn)介
R 既是一種語(yǔ)言(R是一種解釋性語(yǔ)言),也是一個(gè)軟件由AT&T貝爾實(shí)驗(yàn)室的S語(yǔ)言發(fā)展而來(lái)具有統(tǒng)計(jì)分析功能和強(qiáng)大的作圖功能開(kāi)源軟件
目前在 R 網(wǎng)站上有 17500個(gè)程序包,涵蓋了基礎(chǔ)統(tǒng)計(jì)學(xué)、社會(huì)學(xué)、經(jīng)濟(jì)學(xué)、生態(tài)學(xué)、地理學(xué)、醫(yī)學(xué)統(tǒng)計(jì)學(xué)、生物信息學(xué)等諸多方面.
?開(kāi)源免費(fèi)???提供豐富的統(tǒng)計(jì)分析工具??可以運(yùn)行在多種平臺(tái),Windows、Linux、Mac
?
二.Rstudio
(1)工作路徑設(shè)置
(2)歷史命令
(3)其他命令
(4)注釋顯示亂碼?File ??Reopen with Encoding...
(5)修改界面顯示字體、快捷鍵、R版本?tools
2. 包package
作用:特定的分析功能,需要用相應(yīng)的程序包實(shí)現(xiàn)。例如:做生存分析,要用到 survival 程序包; 做meta分析,要用到 meta 包等等。
包是R函數(shù)、數(shù)據(jù)文件、幫助文檔組成的集合。相當(dāng)于C語(yǔ)言中的庫(kù)
存儲(chǔ)包的目錄稱為庫(kù)(library)。
從官網(wǎng)下載,安裝本地包
install.packages() ???????????打開(kāi)安裝包目錄
install.packages(“包名”) ???安裝一個(gè)包
library(包名) ??加載一個(gè)包
search() ???????查看已經(jīng)加載的所有包
help(package=“包名”)
(1)常用包
R提供了大量功能各異的包????技術(shù):繪圖類、統(tǒng)計(jì)檢驗(yàn)類、機(jī)器學(xué)習(xí)?
行業(yè):微陣數(shù)據(jù)、信用風(fēng)險(xiǎn)建模、社會(huì)科學(xué)等
注意:“*.tar.gz”是針對(duì)LINUX系統(tǒng)的,“*.tgz”是用于MAC OS的,只有“*.zip”才是用于WIN系統(tǒng)的,這一點(diǎn)非常關(guān)鍵。
3 . ?.Rdata和.history
?以“.”開(kāi)頭的文件,通常用作配置,系統(tǒng)默認(rèn)隱藏這類文件。
如果打開(kāi)Rstudio特別慢,可能是因?yàn)?Rdata保存了很大的變量,可以找到.Rdata文件刪掉。
?
第二節(jié) R 語(yǔ)言中的數(shù)據(jù)對(duì)象
一、數(shù)據(jù)對(duì)象object
1.數(shù)據(jù)對(duì)象(基本知識(shí))
區(qū)分大小寫(xiě)
不能使用關(guān)鍵字,如NA ,for 等
查詢特定格式對(duì)象ls(pat=“m”)
查詢對(duì)象及內(nèi)容ls.str()
數(shù)據(jù)對(duì)象的屬性:類型,模式、長(zhǎng)度、維度、名稱等;
數(shù)據(jù)對(duì)象(變量)的類型
| 數(shù)據(jù)對(duì)象的類型 | 含義 |
| 數(shù)值型(numeric) | 整數(shù)(integer)、單精度和雙精度(double) |
| 邏輯型(logical) | 值為TRUE或FALSE |
| 字符型(character) | 用單引號(hào)或者雙引號(hào)引用 |
| 復(fù)數(shù)型(complex) | a+bi |
| 原子型(raw) | 二進(jìn)制形式保存 |
3.特殊的數(shù)據(jù)對(duì)象
| 類型 | 判別函數(shù) | 轉(zhuǎn)換函數(shù) |
| 數(shù)值 | is.numeric() | as.numeric() |
| 整數(shù) | is.integer() | as.integer() |
| 雙精度 | is.double() | as.double() |
| 復(fù)數(shù) | is.complex() | as.complex() |
| 字符 | is.character() | as.character() |
| 邏輯 | is.logical() | as.logical() |
| 無(wú)窮 | is.infinite() | - |
| 有限 | is.finite()a | - |
| 不確定 | is.nan() | - |
| 缺失 | is.na() | - |
| 空 | is.null() | as.null |
?
4.基本運(yùn)算
開(kāi)方sqrt(),指數(shù)exp(),對(duì)數(shù)log(),三角函數(shù)sin(),cos()
多組命令分隔符 ?;
5.R中數(shù)據(jù)對(duì)象的結(jié)構(gòu)
R語(yǔ)言中的基本數(shù)據(jù)結(jié)構(gòu)
向量
矩陣
數(shù)組
數(shù)據(jù)框
列表
R數(shù)據(jù)對(duì)象的類別:
????list(c(1,2,3,4,5),c(“A”,”B”,”C”))
R對(duì)象都有類型(mode)和長(zhǎng)度( length )兩個(gè)基本(存儲(chǔ))屬性
類型(mode)(表示對(duì)象在內(nèi)存中的存儲(chǔ)類型)
類型:numeric(數(shù)值)、logical(邏輯)、complex(復(fù)數(shù))、character(字符)
如:mode(rep(23,times=100))
????????mode(c(1,3,5,7)>5)
????????ch1<-rep(c("a","b","c"),times=5)
????????dim(ch1)<-c(3,5)
????????mode(ch1)
修改類型
如:mode(ch1)<-"numeric"
8.對(duì)象的屬性
對(duì)象長(zhǎng)度賦值 ?如 :length(x)<-5
R 允許對(duì)超出長(zhǎng)度的下標(biāo)賦值,結(jié)果是?
如:x<-numeric()?????????????length(x)???????????length(x)<-5 ????????x[5]<-15
9.attributes和attr函數(shù)
x<-c(apples=2.5,orange=2.1);attributes(x)
f1<-factor(rep(c(1,2),3));attributes(f1)
exact:是否與which精確匹配,邏輯值
如:attr(x,"names")
????attr(x, "type")<-"fruit" ??#給X增加type屬性
attributes(x)
10.class屬性
如:mat<-matrix(rep(c(1,2,3,4),times=4)) ??class(f1)<-"tree"將f1定義為一種“tree”數(shù)據(jù)結(jié)構(gòu)
class(mat)??????????mode(mat) ?#注意二者區(qū)別????????
class(x):
- 當(dāng)x是單個(gè)值,或者向量的時(shí)候:返回的結(jié)果和mode一致,如numeric,character
- 其他情況(矩陣,數(shù)組,日期,因子)
class返回(matrix,array,Date,factor)
mode返回(x中元素的類型——在內(nèi)存中的存儲(chǔ)類型logical(邏輯型)、numeric(數(shù)值型)、complex(復(fù)數(shù)型)、character(字符型) )
- 當(dāng)x是數(shù)據(jù)框的時(shí)候,class返回dataframe,mode返回list
- 當(dāng)x是列表的時(shí)候,class和mode都返回list
二、向量vector
注:單個(gè)向量中的數(shù)據(jù)類型是固定的,比如數(shù)值型向量中的元素就必須全為數(shù)值,而字符型向量中的元素必須全部為字符。
x<-c(1,2,3,4,5),其中c()為連接函數(shù)???????????????????c(1,2,3,4,5)->x
assign(“x”,c(1,2,3,4,5)) ????????????????????????????numeric(length)生成初始向量
1.有規(guī)律的向量
- 等差數(shù)列
a:b 表示從a開(kāi)始,逐項(xiàng)加1,直到b為止。???????如 1:10表示1 2 3 4 5 6 7 8 9 10
:運(yùn)算符優(yōu)先級(jí)高于四則運(yùn)算 ?如 ?2*1:15??????????????????如 ??1:n-1 表示??
- 等間隔函數(shù)
from,to 為數(shù)值,表示開(kāi)始和結(jié)束?????by為數(shù)值,表示間隔
length.out為數(shù)值,表示數(shù)列長(zhǎng)度??along.with為向量,表示數(shù)列長(zhǎng)度與該向量長(zhǎng)度相等
- 重復(fù)函數(shù)
x為數(shù)量、向量、數(shù)據(jù)對(duì)象???????????times ,x重復(fù)的次數(shù)
length.out,重復(fù)后該向量的長(zhǎng)度??????each,x中每個(gè)分量重復(fù)的次數(shù)
正整數(shù)向量,x中分量對(duì)象重復(fù)的次數(shù)
2.邏輯向量
連接函數(shù)生成邏輯向量 z<-c(T,F,T,T) z1<-c(z,T)
邏輯運(yùn)算生成邏輯向量 y<-c(5,6,7,8,9);y>5
which()判斷分量中誰(shuí)為T?????logical()構(gòu)造初始邏輯向量
NA表示缺失 ??z<-c(1:4,NA)
is.na(z) 檢測(cè)向量中是否有缺失值
z[is.na(z)]<-0 將缺失數(shù)據(jù)改為0
(1)分量為字符串的向量z<-c("happy","birthday")
(2)字符向量函數(shù)
character(length=5) 構(gòu)造初始字符
is.character(z) 判斷是否為字符型
nchar() 提取字符向量中分量個(gè)數(shù)
6.字符向量函數(shù)
(1)substr(z,start,stop)
求子串,start,stop取整數(shù)或整數(shù)向量,分別表示取子串的起始和結(jié)束位置。
如 ?substr(“abcde”,2,4) ??bcd
????substr(rep(“abcdef”,4),1:4,4:5)
?????"abcd" "bcde" "cd" "de" ???#短向量被重復(fù)使用
(2)substr(z,start,stop)<-value
???替換子串,start,stop取整數(shù)或整數(shù)向量,分別表示替換子串的起始和結(jié)束位置,value為替換的向量
???如:x<-rep("abcdef",4)
???????substr(x,2,6)<-c("y")
???????string1<-c("生物1","生物2","生物3")
???????substr(string1,1,2)<-c("信管")
(3)paste() ?“粘貼”多個(gè)對(duì)象
???paste(……,sep=“ ”,collapse=NULL),……為一個(gè)或多個(gè)對(duì)象,sep為分隔符
???如:paste("Happy","birthday")
???????paste("Happy","birthday",sep=",")
???????paste("信管2016",1:4,sep="-")
???????paste(c("x","y"),rep(c(1,2),each=2))
(4)strsplit(x,split,fixed=FALSE)
分解字符向量,x為待分解字符向量,在split出現(xiàn)處分解,fixed為F時(shí)表示split精確匹配
如:strsplit("you are a good boy"," ")
(5)noquote()
去掉字符串中的引號(hào)
如:noquote("hello")
7.用vector生成向量
vector(mode="logical",length=0)
mode為生成向量的類型,默認(rèn)為邏輯型??length為向量長(zhǎng)度
如:vector(length = 3)
????vector(mode="numeric",length = 3)
8.向量的下標(biāo)
X[i]
(1)其中X為向量名,i為下標(biāo),x[i]表示向量中第i個(gè)分量
(2)修改某個(gè)分量的值??????x[2]<-"aaa”
(3)向量的正下標(biāo)表示被選中的分量
???x<-10:20;x[c(1,2,3,4)]
???x[c(1,2,3,1)]
???c("a","b","c","d")[rep(c(2,1,3),3)]
(5)邏輯下標(biāo)
作用:選擇向量中所有邏輯下標(biāo)為真的分量
如: x<-c(1,3,6);x[x>5]
????????z<-c(-1,1:3,NA);y<-z[!is.na(z)];y
(6)字符下標(biāo)
給向量的分量添加名稱的2種方法
如: ages<-c(Li=33,zhang=29,Wang=31)
names()命名函數(shù)??如: fruit<-c(5,10,8,11)?;names(fruit)<-c("orange","banana","apple","peach")
(1)最小值、最大值、范圍
min(x) ?which.min(x)哪一個(gè)最小 ??
max(x) ?which.max(x)哪一個(gè)最大
range(x)
(2)求和、求乘積
?
sum(x) ?和
prod(x) 分量乘積
length(x) ?分量個(gè)數(shù)
中位數(shù) ???median(x)
均值 ?????mean(x)
方差 ?????var(x)
標(biāo)準(zhǔn)差 ???sd(x)
向量排序 ?sort(x)
保留小數(shù) ?round(x,digit)
隨機(jī)數(shù) ???runif(n,min,max) ??
round(3.555,2) #保留兩位小數(shù)
runif(50,1,20) #產(chǎn)生50個(gè)1-20之間的隨機(jī)數(shù)
?
?
- 因子Factor
1.因子
minzu<-c("漢族","維吾爾","回族","維吾爾","漢族")
grade<-c("及格","優(yōu)秀","不及格","優(yōu)秀","良好")
score<-c(67,88,57,93,78)
類別:沒(méi)有順序之分的類別向量,如民族
有序:表示順序關(guān)系的向量,如等級(jí)
連續(xù):某個(gè)范圍內(nèi)的任意值,同時(shí)表示數(shù)量和順序,如分?jǐn)?shù)
因子:類別和有序向量稱為因子
2.Factor函數(shù)
作用:將一個(gè)向量轉(zhuǎn)換成因子
格式
factor(x,levels,labels=levels,exclude=NA,ordered=is.ordered(x))
?
x:被轉(zhuǎn)換的向量
levels:因子水平,可以為空
labels:各水平的名字,可以為空
exclude:從x中剔除的水平值
ordered:因子水平是否有序,TRUE 或者FALSE
?
例:
data<-c(1,2,3,3,1,2,2,3,1,3,2,1) ??#數(shù)值向量
fdata<-factor(data)
grade<-c("優(yōu)","良","差","差","優(yōu)","良","良","差","優(yōu)","差","良") ??#字符向量
fgrade<-factor(grade)
3.gl函數(shù)
生成因子
(1)gl(n,k,length=n*k,labels=1:n,ordered=FALSE)
?
n: 水平個(gè)數(shù),整數(shù)
k: 重復(fù)次數(shù),整數(shù)
length:因子向量的長(zhǎng)度
labels:因子的水平名稱
ordered:是否有序
?
(2)levels()
查看因子的水平 ???levels(fdata) ?
例:gl(3,5) ?#3個(gè)水平,每個(gè)水平重復(fù)5次
gl(3,5,labels=c("A1","A2","A3")) ?#帶名稱的因子
gl(3,5,labels=paste("A",1:3,sep="")) ??#因子的名稱用paste函數(shù)生成
4.與因子有關(guān)的函數(shù)
(1)table函數(shù)
統(tǒng)計(jì)因子向量中各水平出現(xiàn)的頻數(shù) ????table(fdata)
(2)tapply函數(shù)
不同水平下指定函數(shù)的計(jì)算
tapply(x,index,fun,simplify=TRUE)
?
x:計(jì)算對(duì)象,向量 ????index:與x長(zhǎng)度相同,表示x的因子水平
fun:需要計(jì)算的函數(shù) ??simplify:返回值類型,T表示數(shù)組,F為列表
?
- 矩陣
1.矩陣的生成
(1)matrix(data, nrow, ncol, byrow, dimnames)
?
data:數(shù)據(jù)向量
nrow:矩陣的行數(shù)
ncol: ?矩陣的列數(shù)
byrow:邏輯值,T表示行序?yàn)橹餍?#xff0c;F表示列序?yàn)橹?/p>
dimnames:行、列名稱,列表格式
?
如:
mdat<-matrix(c(1,2,3,4,5,6,7,8,9,0),nrow=2,byrow=T,dimnames=list(c("row1","row2"),c(“C1”,”C2”,”C3”,”C4”,”C5”)))
(2)dim函數(shù)
設(shè)置或求矩陣的維數(shù)
如:dim(mdat)
???x<-1:12 ?; ???dim(x)<-c(3,4)將向量X以列序?yàn)橹餍蛟O(shè)置為矩陣
2.與矩陣運(yùn)算有關(guān)的函數(shù)
?
(1)求矩陣的維數(shù)
dim() ????求矩陣的行列數(shù)
nrow() ??求矩陣的行數(shù)
ncol() ????求矩陣的列數(shù)
?
(2)矩陣的合并
rbind() ??對(duì)矩陣按行合并,要求子矩陣有相同列數(shù)
如: x1<-c(1,2,3,4,5,6)
????????x2<-c("a","b","c","d","e","f")
????????dim(x1)<-c(2,3)
????????dim(x2)<-c(2,3)
????????rbind(x1,x2)
cbind() ?對(duì)矩陣按列合并,要求子矩陣有相同行數(shù)
(3)矩陣的拉直
as.vector() 將矩陣轉(zhuǎn)換為向量
如:as.vector(mat)
(4)矩陣行列的命名
rownames() ?求矩陣行名,或?yàn)槠涿?/p>
colnames() ???求矩陣列名,或?yàn)槠涿?/p>
如:mdat<-matrix(c(1,2,3,4,5,6,7,8,9,0),nrow=2,byrow=T)
rownames(mdat)<-c("row1","row2")
colnames(mdat)<-paste("C",1:5,sep="")
3.矩陣下標(biāo)
使用矩陣下標(biāo)訪問(wèn)矩陣元素,如同C語(yǔ)言中的二維數(shù)組,下標(biāo)從1開(kāi)始
如:A[1,2] 表示行下標(biāo)為1,列下標(biāo)為2的矩陣元素值
A[1,] 表示行下標(biāo)為1的整行元素
A[,-2] ??表示矩陣去掉列下標(biāo)為2的元素剩下的元素
4.數(shù)組的生成(2種方法)
(1)array(data=NA,dim=length(data),dimnames=NULL)
?
data:數(shù)據(jù)向量
dim:數(shù)組各維長(zhǎng)度,整數(shù)向量,默認(rèn)為data長(zhǎng)度
dimnames:各維的名稱,列表的形式
?
如:data<-rep(c(1,3,5,7),times=5) ????x<-array(data,dim=c(5,4))
????x1<-array(data,dim=c(2,5,2))
(2)dim()構(gòu)造數(shù)組
x2<-1:24
dim(x2)<-c(3,4,2)
dimnames對(duì)各維命名
dimnames(x2)<-list(c("row1","row2","row3"),c("col1","col2","col3","col4"),c("z1","z2"))
5.數(shù)組下標(biāo)
使用下標(biāo)對(duì)數(shù)組元素訪問(wèn)
?
a<-1:20
dim(a)<-c(4,5)
a[1,3];a[1,];a[1,2:3]
?
6.apply函數(shù)
對(duì)矩陣或數(shù)組按照維度做運(yùn)算
apply(x,margin,fun)
?
x:數(shù)組或矩陣
margin:做運(yùn)算的維度,1表示行,2表示列
fun:運(yùn)算函數(shù)
?
如:A<-matrix(1:6,nrow=2);A?????????sum(A);sum(A[,2])?????????apply(A,1,sum)
?
- 列表list
列表的元素類型可以是任意對(duì)象,可以是不同類型。
1.列表的構(gòu)造
list(成員列表)
如:st<-list(name="Fred",wife="Mary",no.children=3,child.age=c(2,4,7))
stu<-list(name="張三",class1=c("高數(shù)","計(jì)算機(jī)","體育","英語(yǔ)"),intrests=c("繪畫(huà)","唱歌"))
2.列表成員的訪問(wèn)
列表名[[下標(biāo)]] ?????如:lst[[1]];stu[[2]];stu[[2]][2]
每次只能訪問(wèn)一個(gè)成員,不能同時(shí)訪問(wèn)多個(gè)
列表名[下標(biāo)]表示一個(gè)子列表 ???如:lst[1]
列表名[[“成員名”]] ??????????如:lst[[“name”]]等價(jià) lst[[1]]
列表名$成員名 ???????????????如: lst$name等價(jià) lst[[1]]
六、數(shù)據(jù)框data.frame
矩陣形式,各列類型不同。列為變量,行為一個(gè)觀測(cè)樣本。
1.數(shù)據(jù)框的生成
(1)data.frame函數(shù)
df<-data.frame(
????????????????Name=c("Alice","Becka","James","Jeffrey"),
????????????????Sex=c("F","F","M","M"),
????????????????Age=c(13,13,12,13),
????????????????Height=c(56.5,65.3,57.3,62.5),
????????????????Weight=c(84,98,83,84))
(2)as.data.frame將其他數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成數(shù)據(jù)框
lst<-as.data.frame(lst)
2.數(shù)據(jù)框的引用
數(shù)據(jù)框元素的引用與矩陣元素的引用方法相同
使用下標(biāo)???????????????????df[1:2,3:4] ;df[,1] #使用下標(biāo)
使用變量名稱???????????????df[[“Name”]];df[,“Name”];df[“Name”];df$Name
3.數(shù)據(jù)框的命名
將名稱向量賦予列或行
變量(列)命名 ?????names(df)<-paste("col",1:5,sep = "")
行命名 ?????rownames(df)<-c("row1","row2","row3","row4")
rownames(df)<-df[,1] ??
3.attach函數(shù)
將數(shù)據(jù)框“連接”到內(nèi)存中,便于調(diào)用 ??attach(df)
r<-Height/Weight
給數(shù)據(jù)框增加新的變量 ???數(shù)據(jù)框名$新變量<-值 ?如:df$r<-Height/Weight
刪除變量:數(shù)據(jù)框名$新變量<-NULL
取消“連接” ??detach(df)
4.lapply()函數(shù)與sapply()函數(shù)
?
(1)lapply()
lapply(x,fun)
lapply(lst[3:5],mean); lapply(lst["Age"],mean)
lapply(df[,3:5],mean)
?
(2)sapply()
sapply(x,fun)
sapply(lst[3:5],mean); sapply(lst["Age"],mean)
sapply(df[,3:5],mean)
?
5.apply,sapply,lapply,tapply,vapply, mapply
apply : 用于遍歷數(shù)組中的行或列,并且使用指定函數(shù)來(lái)對(duì)其元素進(jìn)行處理;
lapply : 遍歷列表向量?jī)?nèi)的每個(gè)元素,并且使用指定函數(shù)來(lái)對(duì)其元素進(jìn)行處理。返回列表向量;
sapply : 與lapply基本相同,只是對(duì)返回結(jié)果進(jìn)行了簡(jiǎn)化,返回的是普通的向量;
mapply: 支持傳入兩個(gè)以上的列表;
tapply: 接入?yún)?shù)INDEX,對(duì)數(shù)據(jù)分組進(jìn)行運(yùn)算,就和SQL中的by group一樣。
?
第三節(jié)程序控制結(jié)構(gòu)
一、分支函數(shù)
1.if / else函數(shù)??多用于兩分支
格式1:if (cond) expr
??????????????如果cond條件成立,則執(zhí)行expr,否則跳過(guò)
格式2:if (cond) cons.expr ?else ?alt.expr
??????????????如果cond條件成立,則執(zhí)行expr,否則執(zhí)行alt.expr
2.if / else函數(shù)的嵌套
if (cond) expr
else if (cond_1) ?expr1
else if (cond_2) expr2
else expr3 ?????????
3.R語(yǔ)言中的if-else語(yǔ)句寫(xiě)法
結(jié)構(gòu) ?1 : ?if() ?xx ?else ???yy ???一行;
結(jié)構(gòu) ?2: ??if() ?{xx} else ?{yy} ?????????????????
或者 ??if(){ ?
??????????????? xx ?????????????????????????
}else ???#此處不能兩行寫(xiě) ????????????????????????
yy
結(jié)構(gòu)3: ?{
if ???
else ?
}
結(jié)構(gòu)3,括號(hào)可以任意寫(xiě)。
4.switch函數(shù)
用于多分支
格式:switch(expr,list)
?????????expr表達(dá)式,List列表
表明:如果表達(dá)式的值在length(list)之間,則返回列表中對(duì)應(yīng)表達(dá)式位置上的值。
如:switch(1,"a","b","c")
如果list有元素名,expr等于元素名時(shí),返回變量名對(duì)應(yīng)的值
y<-"fruit" ?
switch(y,fruit="banana",vegetable="broccoli",meat="beef")
二、循環(huán)函數(shù)
1.for函數(shù)
格式:for(var in seq) expr
?var:循環(huán)變量 ?????????seq:向量表達(dá)式,如1:20 ???????expr:一組表達(dá)式
2.while函數(shù)
格式:while (cond) expr
例如:編寫(xiě)計(jì)算1000以內(nèi)的Fibonacci數(shù)
????????f(i)=f(i-1)+f(i-2)
f<-c(1,1);i<-1
while(f[i]+f[i+1] < 1000){
??f[i+2]<-f[i]+f[i+1]
??i<-i+1
}
3.repeat函數(shù)
格式:repeat ?expr
???結(jié)合break語(yǔ)句跳出循環(huán)
例:i<-10
repeat{
??print("hello") ;i<-i-1
????if (i<0) break
}
4.中止語(yǔ)句與空語(yǔ)句
中止語(yǔ)句break ??強(qiáng)行中止,跳出循環(huán)
三、R程序設(shè)計(jì)
1.函數(shù)定義
格式:funname<-function(arg_1,arg_1,……)expression
?
funname:函數(shù)名
arg_1,arg_2:函數(shù)參數(shù)
?expression:表達(dá)式
?
2.函數(shù)調(diào)用
格式:funname(expr_1,expr_2)
注意:在編輯器中編寫(xiě)和保存使用時(shí),需要調(diào)用函數(shù)所在的腳本文件 ???
????????source(“funname.R”)
????????funname()
3.無(wú)參數(shù)函數(shù)
??執(zhí)行時(shí)不需要輸入?yún)?shù),每次執(zhí)行,返回值都相同。
例如:welcome<-function()
????????print(“welcome to use R”)
調(diào)用:source(“welcome.R”)
???????welcome()
4.有參數(shù)的函數(shù)
函數(shù)名<-function(){
……
返回值計(jì)算表達(dá)式
}
5.有名參數(shù)
函數(shù)調(diào)用時(shí),如果參數(shù)沒(méi)有名稱,需要按照定義順序設(shè)置參數(shù);
函數(shù)調(diào)用時(shí),可以指定形參和實(shí)參的對(duì)應(yīng)關(guān)系,此時(shí)順序可以不按照定義時(shí);
如 fun1<-function(data,data.frame,graph,limit)
??調(diào)用 ans<-fun1(d,df,TRUE,20)
????????ans<-fun1(d,df,graph=TRUE,limit=20)
????????ans<-fun1(data=d,limit=20,graph=TRUE,data.frame=df)
6.遞歸函數(shù)
(1)遞歸函數(shù):自身調(diào)用自身,在函數(shù)體內(nèi)增加一個(gè)計(jì)算結(jié)果的變量
如:向量的求和公式編寫(xiě)
例:求n的階乘
(2)類似函數(shù)不用編寫(xiě),R自帶很多相應(yīng)函數(shù)
Browser()調(diào)試提示符窗口上方的導(dǎo)航按鈕實(shí)現(xiàn)下一步操作:
第一個(gè)按鈕是Next(下一步) 用來(lái)運(yùn)行函數(shù)的下一行代碼;
第二個(gè)按鈕是Continue(繼續(xù)) 用來(lái)運(yùn)行函數(shù)剩余的所有代碼,完成之后退出瀏覽器模式;
第三個(gè)按鈕是Stop(停止) 他會(huì)立刻中斷并退出瀏覽器模式,不運(yùn)行任何代碼;
7.作用域
全局變量
x<-10;y<-20 ?????????#x,y全局變量
f<-function(y) ?x+y ??#y為局部變量 ????????f(10)
8.程序調(diào)試
(1)print()顯示變量?jī)?nèi)容的函數(shù)
使用print()函數(shù)顯示變量的值
如:f<-function(y){
???????????print(x);print(y);x+y
????????}
??????f(y)
??????f(10)
(2)cat()函數(shù)
f<-function(y){
??cat('x=',x,'\n');cat('y=',y,'\n');x+y
}
(3)跟蹤程序的函數(shù)
browser():在程序體內(nèi)增加該語(yǔ)句,單步調(diào)試;
debug():函數(shù)運(yùn)行前增加debug(函數(shù)名),標(biāo)記函數(shù)進(jìn)行測(cè)試;
外部文件的讀寫(xiě)
?第四節(jié) 外部文件的讀寫(xiě)
一、外部文件的讀寫(xiě)
二、純文本文件
1.read.table()函數(shù)?????讀取表格形式的文件read.table(file,header=True,sep=“”,row.names,col.names,skip,nrows)
?
file:讀入數(shù)據(jù)文件名,數(shù)據(jù)以表格形式(純文本文件)保存在文件中。
header:數(shù)據(jù)文件中有表頭,則為T。
sep:數(shù)據(jù)分隔字符
row.names:行名
col.names:列名(變量名)
skip:讀數(shù)據(jù)時(shí)跳過(guò)的行數(shù),非負(fù)整數(shù)。
nrows:讀取的行數(shù)
?
例:體會(huì)以下代碼的含義
data_stu<-read.table("stu.txt",header=T)
data_stu
data_stu<-read.table("stu.txt",header=T,row.names = paste("201601",1:5,sep=""))
data_stu<-read.table("stu.txt",header=F,skip=2)
2) scan()函數(shù)
直接讀純文本文件
?
file:讀取的文件名
sep:為分隔符
?
例:data_stu1<-scan(file="data.txt")
2.read.fwf()
將固定寬度格式的文本文件讀入R
read.fwf(file,widths,header,sep,skip,row.names,n)
?
file:讀入文件名
widths:整數(shù)向量,每個(gè)值表示讀入變量的?????????????寬度
header:是否有變量名
sep:分隔變量名的符號(hào)
skip:文件頭部跳過(guò)的行數(shù)
row.names:行名的向量
n:讀入R的行數(shù)
?
三、Excel文件
1.read.delim()函數(shù)
需要將Excel文件轉(zhuǎn)換為文本文件(制表符分隔)后讀取
read.delim(file,header)
file :文件名 ?????header:是否有表頭,值為True或者False
2.read.csv()函數(shù)
需要將Excel文件轉(zhuǎn)換成CSV(逗號(hào)分隔)文件
read.csv(file,header)
3.直接讀取Excel數(shù)據(jù)表
例
install.packages(“RODBC”)
library(RODBC)
con<-odbcConnectExcel(“scores.xls”)
tbles<-sqlTables(con)
sh1<-sqlFetch(con,tbls$TABLE_NAME[1])
qry<-paste(“select * from [“,tbls$TABLE_NAME[1],”]”,sep=“”)
shc<-sqlQuery(con,qry)
close(con)
四、其他軟件格式數(shù)據(jù)文件
可以讀取SPSS\SAS\S-PLUS和Stata數(shù)據(jù)文件
1)必須先加載foreign數(shù)據(jù)包 ????2)read.spss(file)
注:對(duì)于大型數(shù)據(jù)的讀取可以使用readr包和readxl包,速度比read.table()快很多。
五、數(shù)據(jù)集的讀取
1.R提供了100多個(gè)數(shù)據(jù)集
2.使用data()函數(shù)查看或加載數(shù)據(jù)集
六、寫(xiě)數(shù)據(jù)文件
1.write()函數(shù)
write(x,file,ncolumns,append)
x:需要寫(xiě)入文件的數(shù)據(jù),通常為矩陣或向量
file:要保存的文件名
ncolumns:列數(shù),字符默認(rèn)1,數(shù)值默認(rèn)5
append:邏輯變量,為T表示在原有文件添加數(shù)據(jù),F表示新文件
2.write.table()與write.csv()
將數(shù)據(jù)寫(xiě)為表格形式的文本文件或者CSV格式文件
write.table(x,file,append,sep)
sep:為分離數(shù)據(jù)的字符
總結(jié)
- 上一篇: 大一计算机网络技术实训总结,大一计算机网
- 下一篇: HBuilder / HBuilder