日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

R语言基础教程6:程序设计基础

發(fā)布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R语言基础教程6:程序设计基础 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
R語言基礎(chǔ)教程1:數(shù)據(jù)類型
R語言基礎(chǔ)教程2:散點圖
R語言基礎(chǔ)教程3:曲線圖、誤差線和圖例
R語言基礎(chǔ)教程4:柱形圖
R語言基礎(chǔ)教程5:圖形頁面排版
R語言基礎(chǔ)教程6:程序設(shè)計基礎(chǔ)
R語言基礎(chǔ)教程7:數(shù)據(jù)描述性統(tǒng)計
使用R處理數(shù)據(jù)完全可以不了解它的編程方法,但編程可以提高效率。
一、運算符

?二、向量運算規(guī)則
?R語言的數(shù)據(jù)以向量為基礎(chǔ)。向量的運算不需要通過下標循環(huán)一個個元素來進行的。如果兩個向量長度相同,是對位置相同的數(shù)據(jù)進行相應(yīng)計算;如果長度不同,較短的向量要重復(fù)取值直到兩個向量長度相同。如果短向量長度不是長向量的整倍數(shù),仍可得到結(jié)果,但有警告。向量運算方式避免了使用循環(huán),速度很快:

> (a <- 1:5)
[1] 1 2 3 4 5
> (b <- 2:6)
[1] 2 3 4 5 6
> (c <- 2:3)
[1] 2 3
> (d <- 2)
[1] 2
> a*b
[1]? 2? 6 12 20 30
> a*c
[1]? 2? 6? 6 12 10
警告信息:
In a * c : 長的對象長度不是短的對象長度的整倍數(shù)
> a*d
[1]? 2? 4? 6? 8 10

三、數(shù)學(xué)函數(shù)
R語言的默認安裝包提供了大量的數(shù)學(xué)與統(tǒng)計函數(shù)。在R語言的定義中,運算符事實上也是函數(shù):
1、操作符函數(shù),包括算術(shù)函數(shù)、比較函數(shù)和邏輯函數(shù):
算術(shù)函數(shù):
??? "+", "-", "*", "^", "%%", "%/%", "/"
比較函數(shù):
??? "==", ">", "<", "!=", "<=", ">="
邏輯函數(shù)
??? "&", "|".
2、數(shù)學(xué)函數(shù):
??? "abs", "sign", "sqrt", "ceiling", "floor", "trunc", "cummax", "cummin", "cumprod", "cumsum", "log", "log10", "log2", "log1p", "acos", "acosh", "asin", "asinh", "atan", "atanh", "exp", "expm1", "cos", "cosh", "sin", "sinh", "tan", "tanh", "gamma", "lgamma", "digamma", "trigamma"
3、數(shù)學(xué)函數(shù)2:
??? "round", "signif"
4、統(tǒng)計特征值函數(shù):
??? "max", "min", "range", "prod", "sum", "any", "all"
5、復(fù)數(shù)函數(shù):
??? "Arg", "Conj", "Im", "Mod", "Re"

四、程序流程控制:
1、if/else分支語句:
基本用法是:if (邏輯判斷) { 語句 } else { 語句 }
2、switch分支語句:
基本用法是:switch(statment, list)
但具體意義和其他語言有些差別。第二個參數(shù)list可以分成多個參數(shù),switch把2到n個參數(shù)都歸為一個list。list參數(shù)分有名參數(shù)和無名參數(shù)。

> a <- 2
> switch(a, log(a), a+3, a-3) #a=2,執(zhí)行列表第二項:a+3
[1] 5
> a <- 1
> switch(a, log(a), a+3, a-3) #a=1,執(zhí)行列表第一項:log(a)
[1] 0


> a <- "agi"
> switch(a, gi=1030567, agi="AT1G10010", name="CBFx") #返回a(名稱)對應(yīng)的列表向量值
[1] "AT1G10010"

3、for循環(huán)語句
基本用法:for (name in expression) {? 語句 }

> a <- 1:5
> b <- NULL
> for(i in a) {b <- c(b,log(i))}
> b
[1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379

R語言的循環(huán)非常耗時,能使用向量運算的盡量避免使用循環(huán)。上面循環(huán)完全沒有必要:

> b <-log(a)

> b
[1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379

4、while和repeat語句:這兩個跟其他語言差不多。
跳出循環(huán)用break,忽略后面語句進行循環(huán)用next。

五、函數(shù)方法
R語言的很多工作都由函數(shù)完成,這是保證結(jié)果準確性和可重復(fù)性的途徑。我們也可以通過編寫自己的函數(shù)提高工作效率。
R語言中函數(shù)定義的方法為:函數(shù)名 <- function(參數(shù)們) { R語句們 }
用法是:函數(shù)名(參數(shù)們)
函數(shù)可以有返回值,返回值就是最后一個語句的結(jié)果;也可以只完成一系列操作(如繪圖)而不用返回值。
下面是一個兩系列數(shù)據(jù)的柱形圖繪制函數(shù):

bar.plot <- function(y1, y2, x=1:length(y1),
sd1=y1*0.05, sd2=y2*0.05,
xlab="Sample", ylab="Level",
labels=c("S1","S2")){
the.data <- rbind(y1, y2)
par(mar=c(3,3,0.5,0.5))
par(mgp=c(2,0.5,0))
pos <- barplot(the.data, ylim=c(0, max(y1,y2)*1.2),
offset=0, axis.lty=1, beside=TRUE,
names.arg = x, col=c("orange","red"))
legend("topleft", legend=labels, fill=c("orange","red"),box.col="white", inset=0.02)
title(xlab=xlab, ylab=ylab)
bw <- 0.2
segments(pos[1,], y1-sd1, pos[1,], y1+sd1, lwd=2)
segments(pos[1,]-bw, y1+sd1, pos[1,]+bw, y1+sd1, lend=2)
segments(pos[1,]-bw, y1-sd1, pos[1,]+bw, y1-sd1, lend=2)
segments(pos[2,], y2-sd2, pos[2,], y2+sd2, lwd=2)
segments(pos[2,]-bw, y2+sd2, pos[2,]+bw, y2+sd2, lend=2)
segments(pos[2,]-bw, y2-sd2, pos[2,]+bw, y2-sd2, lend=2)
box()
}

以mybar.R為文件名保存到D盤根目錄下。重新啟動R終端,你可以反復(fù)調(diào)用這個文件里面的bar.plot函數(shù)繪制出你需要的柱形圖:

> source("d:/mybar.R")
> NF <- c(17.44 , 2.56 , 2.70 , 18.71 , 5.61 , 32.98)
> CA <- c(11.48 , 0.75 , 1.16 , 12.73 , 2.84 , 20.04)
> sd.NF <- c(1.27 , 0.15 , 0.48 , 2.01 , 0.80 , 4.09)
> sd.CA <- c(1.09 , 0.36 , 0.11 , 1.82 , 0.92 , 2.36)
> x <- paste("S", 1:length(NF), sep="")
> bar.plot(x=x, y1=NF, y2=CA, sd1=sd.NF, sd2=sd.CA, labels=c("NF", "CA"))


?
由于bar.plot函數(shù)除y1和y2外其他參數(shù)都有默認值,你可以只提供兩個系列的數(shù)據(jù)(默認誤差為數(shù)據(jù)的5%):

> source("d:/mybar.R")
> set.seed(1000)
> y1 <- abs(rnorm(10))*10
> y2 <- abs(rnorm(10))*5
> bar.plot(y1,y2)


?
雖然數(shù)據(jù)更換了,但是獲得的圖形外觀完全一樣!這已經(jīng)不僅僅是效率的問題了。是懶人的辦法,也是聰明人的辦法。比起origin作圖軟件,R的可重復(fù)性要好得多吧?Excel的作圖方法是小兒科了,談不上科學(xué)性(但是很多人在用,呵呵)。

總結(jié)

以上是生活随笔為你收集整理的R语言基础教程6:程序设计基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。