目錄
- 首先
- 導(dǎo)言
- 基本原理與概念
基本原理
賦值分配(assign)等操作
在線幫助- R的數(shù)據(jù)操作
對象
在文件中讀寫數(shù)據(jù)
存儲數(shù)據(jù)
生成數(shù)據(jù)
- 規(guī)則序列
- 隨機(jī)序列
使用對象- 創(chuàng)建對象
- 對象的類型及轉(zhuǎn)換
- 運(yùn)算符
- 訪問一個對象的數(shù)值: 下標(biāo)系統(tǒng)
- 訪問對象的名稱
- 數(shù)據(jù)編輯器
- 數(shù)學(xué)運(yùn)算和一些簡單的函數(shù)
- 矩陣計(jì)算
- R繪圖
管理繪圖
繪圖函數(shù)
低級繪圖命令
繪圖參數(shù)
一個實(shí)例
grid和lattice包- R的統(tǒng)計(jì)分析
關(guān)于方差分析的一個簡單例子
公式
泛型函數(shù)
包- R編程實(shí)踐
循環(huán)和向量化
用R寫程序
編寫自己的函數(shù)
首先
- 基礎(chǔ)部分對重點(diǎn)知識做了摘抄
- 繪圖部分列出了提綱
- 關(guān)于統(tǒng)計(jì),函數(shù)及其參數(shù)還需要慢慢積累總結(jié)
- R for Beginners 電子版
導(dǎo)言[1]
- R的開發(fā)及由來. 貝爾實(shí)驗(yàn)室&S語言
- R的編碼及安裝. 基于C及Fortran編寫&Comprehensive R Archive Network(CRAN)有詳細(xì)安裝及包使用指南
- 強(qiáng)大的統(tǒng)計(jì)分析和作圖功能.
- 靈活性. 作為計(jì)算機(jī)語言的一種, 與語言編寫的窗口化工具相比, 其可以使用各種編程語句, 切分提取數(shù)據(jù), 滿足更多的個性化需求
基本原理與概念
基本原理
- R是解釋性語言, 而非編譯語言. python同樣是, 而C&Foortan&Pascal就是編譯語言,運(yùn)行效率高很多
- 所有變量, 數(shù)據(jù), 函數(shù)及結(jié)果都已對象(object)的形式存在計(jì)算機(jī)的內(nèi)存中, 并冠有相應(yīng)的名稱
- 基本工作原理: 用戶通過鍵鼠輸入調(diào)用庫(library)中的函數(shù)→計(jì)算機(jī)根據(jù)指令進(jìn)行諸如讀取, 計(jì)算, 顯示, 網(wǎng)絡(luò)調(diào)用等流程→將結(jié)果儲存在對象(object)中
- 對象的名稱不能以數(shù)字開頭, 大小寫代表不同的對象
賦值分配(assign)等操作
-
賦值. 三者有差別
-><-=
-
顯示內(nèi)存中所有對象
ls() #只輸出對象名稱ls(pat="X") #指定顯示某個對象及其賦值, pat即patternls(pat="^X") #正則表達(dá)式ls.str() #輸出對象名稱+賦值
在線幫助
-
最常用
?ls()help(ls)
-
未導(dǎo)入內(nèi)存的
help("bs",package="splines") -
搜索某一變量
help.search("tree")
R的數(shù)據(jù)操作
對象
-
對象的兩個內(nèi)在屬性: 類型(
mode()函數(shù))和長度(length()函數(shù))類型分為: 數(shù)字型, 字符型, 復(fù)數(shù)型和邏輯性(TRUE&FALSE)
長度是對元素中數(shù)目的統(tǒng)計(jì)
字符串引用單引號雙引號問題, 與perl和python相似
Inf和-Inf表示±∞,NaN表示非數(shù)字
在文件中讀寫數(shù)據(jù)
首先通過
getwd("")確定工作目錄-
mydata <- read.table("文件"), 可用制表符分隔的txt文件, 以下為缺省值read.table(file, header = FALSE, sep = "", quote = "\"’", dec = ".", row.names, col.names, as.is = FALSE, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip,strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#") -
mydata <- scan("文件", what=list("",0,0)), what后表示第一個為字符變量, 后兩個為數(shù)值變量, 忽略what則創(chuàng)建數(shù)值變量scan(file = "", what = double(0), nmax = -1, n = -1, sep = "", quote = if (sep=="\n") "" else "’\"", dec = ".", skip = 0, nlines = 0, na.strings = "NA", flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE, blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "") mydata <- read.fwf("文件",widths=c(數(shù)字,數(shù)字,數(shù)字...)), widths表示讀取每個字段的寬度, 將一整行字符按要求拆分成相應(yīng)個數(shù)的相應(yīng)長度, 其余選項(xiàng)與read.table()相同-
補(bǔ)充:
read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".", fill = TRUE, ...)read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",", fill = TRUE, ...)read.delim(file, header = TRUE, sep = "\t", quote="\"", dec=".", fill = TRUE, ...)read.delim2(file, header = TRUE, sep = "\t", quote="\"", dec=",", fill = TRUE, ...)
存儲數(shù)據(jù)
-
write.table()write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", eol = "\n", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "double")) save(x,y,z,file="xyz.RData")&load("xyz.RData")save.image()
生成數(shù)據(jù)
上部分介紹了自動讀取和輸出, 以下列舉的均為手動生成數(shù)據(jù)用到的函數(shù)
規(guī)則序列
-
函數(shù)中變量的賦值與python相似,ex.
seq(1,9,5)&seq(length=9, from=1,to=5), 完全相同 -
:優(yōu)先級很高,ex.1:10-1&1:(10-1) -
創(chuàng)建數(shù)據(jù)框
expand.grid(h=c(60,80),w=c(100,300),sex=c("male","female"))h w sex 1 60 100 male 2 80 100 male 3 60 300 male 4 80 300 male 5 60 100 female 6 80 100 female 7 60 300 female 8 80 300 female注: 數(shù)據(jù)行數(shù)等于 2??2??2, 內(nèi)部可以加入
seq()等其他函數(shù) -
幾個常用函數(shù):
seq(x,x,x)scan()rep(x,x)-
sequence(x:x)&sequence(c(x,x,x,...)) gl(x,x,label=c("xx","xx"...),length=x)
隨機(jī)序列
- 在統(tǒng)計(jì)學(xué)中, 產(chǎn)生隨機(jī)序列特別重要, 表中介紹了很多函數(shù)
- 函數(shù)大多命名為
rXXX(), 可以通過?rXXX()查看說明, 會發(fā)現(xiàn)還有d/p/q...XXX()多中使用方法, 區(qū)別在于缺省值不同 - 復(fù)習(xí)過統(tǒng)計(jì)學(xué)相關(guān)知識后在回頭總結(jié)
使用對象
創(chuàng)建對象
- 向量
- 因子
- 矩陣
- 數(shù)據(jù)框
- 列表
- 時間序列
- 表達(dá)式
對象的類型及轉(zhuǎn)換
格式轉(zhuǎn)換有很多限制條件, 先記基礎(chǔ)知識吧
-
轉(zhuǎn)數(shù)據(jù)型
as.numeric() -
轉(zhuǎn)邏輯型
as.logical() -
轉(zhuǎn)字符型
as.character()
運(yùn)算符
包括三種運(yùn)算符
-
數(shù)學(xué)運(yùn)算
+ - * / ^ %% #模 %/% #整除 -
比較運(yùn)算符
< > <= >= == != -
邏輯運(yùn)算符
! #邏輯非 & #邏輯與 && #同上 | #邏輯或 || #同上 xor(x,y) #異或注:
1. 比較運(yùn)算符作用在兩個被比較對象的每個元素上, ex.
x >- 1:3; y >- 1:3 x==y2. &和|作用在對象中的每一個元素上并且返回和比較次數(shù)相等長度的邏輯值; &&和||只作用在對象的第一個元素上
-
比較函數(shù)
identical(x,y)all.equal(x,y)
訪問一個對象的數(shù)值: 下標(biāo)系統(tǒng)
與python和perl極為相似, 只是略過復(fù)雜
- 第一個元素從
x[1]開始 - 方括號內(nèi)可以一次性取多個數(shù)值, 也可以嵌合其他函數(shù)
- 對矩陣取值時, 缺省返回維數(shù)盡可能低的對象, 可以通過
x[,2, drop = FALSE]返回矩陣 - 方括號中
-表示不顯示某值, 同樣可以嵌合其他函數(shù) -
我的理解: 嵌合邏輯下標(biāo)(TRUE/FALSE)時, 對象中每個元素通過
1/0取舍 -
[[]]方括號套方括號
訪問對象的名稱
names是一個和對象有同樣長度的向量并且可以通過函數(shù)names來訪問
一般情況下, 對象是沒有names的, ex.
names(x)對象賦予names, ex.
names(x) <- c("a","b", "c"...) #賦予名稱的數(shù)量要≤對象中元素的數(shù)目-
對于矩陣
行names
rownames(x)列names
colnames(x)返回全部names列表
dimnames(x)
數(shù)據(jù)編輯器
data.entry(x)- High Sierra 10.13.6之后不再隨附X11, 但可以手動下載安裝XQuartz
- 可能需要重啟才能正產(chǎn)使用
數(shù)學(xué)運(yùn)算和一些簡單的函數(shù)
相同長度的向量運(yùn)算, 逐個元素運(yùn)算
-
不同長度的向量運(yùn)算, 最短的元素會重復(fù)使用
x <- 1:4 y <- 1:2 z <- x + y 不同長度, 長度也不成倍數(shù)時, 運(yùn)行會有警告信息, 仍然會將最短的元素重復(fù)使用
常用函數(shù)及部分統(tǒng)計(jì)函數(shù)見原文P33, 34, 太TM多了...
矩陣計(jì)算
-
上下合并矩陣
rbind(m1,m2) -
左右合并矩陣
cbind(m1,m2) -
兩矩陣相乘
m1 %*% m2 -
提取/修整/創(chuàng)建對角線
提取:
diag(m1)修整:
diag(m1) <- 10創(chuàng)建:
v <- c(10,20,30) diag(v) diag(1.2, nr = 3, nc = 5)
R繪圖
以下三個章節(jié)概括了R的主要內(nèi)容, 但要熟練使用R, 需要
- 掌握接觸的統(tǒng)計(jì)知識
- 熟悉盡可能多的函數(shù)及其參數(shù)
- 實(shí)踐出真知
因?yàn)榻y(tǒng)計(jì)知識比較匱乏, 以下記錄只是為了形成一個框架
管理繪圖
Rstudio集成了各種工具, 不需要通過
x11()開啟繪圖窗口-
圖形分割(也不知道放到這有啥特殊的意義)
構(gòu)建矩陣
matrix()layout(矩陣)展示分隔結(jié)果
layout.show()-
ex.
m <- matrix(1:4, 2, 2) layout(m, widths=c(1, 3), heights=c(3, 1)) layout.show(4)
繪圖函數(shù)
表中列舉了常用的基礎(chǔ)繪圖函數(shù), 第二遍每個都用一下
低級繪圖命令
挺詳細(xì)的, 諸如如何畫水平線,長方形, 添加標(biāo)題等等表中都有介紹, 后重點(diǎn)對插入公式做了重點(diǎn)介紹
繪圖參數(shù)
上兩節(jié)介紹的是常用函數(shù), 這節(jié)講的是函數(shù)中常用的參數(shù), 諸如字體大小,對齊方式,背景顏色,實(shí)線虛線等等表中都有介紹, 后重點(diǎn)對標(biāo)記符號的種類做了列舉
一個實(shí)例
-
基礎(chǔ)
x <- rnorm(10) y <- rnorm(10) plot(x,y) -
調(diào)整參數(shù)(低級)
plot(x, y, xlab="Ten random values", ylab="Ten other values", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow", bty="l", tcl=0.4, main="How to customize a plot with R", las=1, cex=1.5) -
調(diào)整參數(shù)(初級)
opar <- par() par(bg="lightyellow", col.axis="blue", mar=c(4, 4, 2.5, 0.25)) plot(x, y, xlab="Ten random values", ylab="Ten other values", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow", bty="l", tcl=-.25, las=1, cex=1.5) title("How to customize a plot with R (bis)", font.main=3, adj=1) par(opar)par()存儲有全部缺省值, 思路: 保存缺省值→修改缺省值→繪圖→通過基礎(chǔ)繪圖命令添加title→還原回之前的缺省值 -
調(diào)整參數(shù)(高級)—全部調(diào)整了
par()的參數(shù)opar <- par() par(bg="lightgray", mar=c(2.5, 1.5, 2.5, 0.25)) plot(x, y, type="n", xlab="", ylab="", xlim=c(-2, 2), ylim=c(-2, 2), xaxt="n", yaxt="n") rect(-3, -3, 3, 3, col="cornsilk") points(x, y, pch=10, col="red", cex=2) axis(side=1, c(-2, 0, 2), tcl=-0.2, labels=FALSE) axis(side=2, -1:1, tcl=-0.2, labels=FALSE) title("How to customize a plot with R (ter)", font.main=4, adj=1, cex.main=1) mtext("Ten random values", side=1, line=1, at=1, cex=0.9, font=3) mtext("Ten other values", line=0.5, at=-1.8, cex=0.9, font=3) mtext(c(-2, 0, 2), side=1, las=1, at=c(-2, 0, 2), line=0.3, col="blue", cex=0.9) mtext(-1:1, side=2, las=1, at=-1:1, line=0.2, col="blue", cex=0.9) par(opar)
grid和lattice包
R的統(tǒng)計(jì)分析
前三小節(jié)涉及很多統(tǒng)計(jì)分析的函數(shù)
關(guān)于方差分析的一個簡單例子
公式
泛型函數(shù)
包
- 常用簡單R包描述
- R包幾種不同的安裝方法
R編程實(shí)踐
對于本章所講的內(nèi)容, 我的理解是, R包括for,if等基礎(chǔ)語句, 但所謂的程序和函數(shù), 是上幾章作圖過程中所調(diào)用的內(nèi)容, 導(dǎo)入數(shù)據(jù)到生成統(tǒng)計(jì)結(jié)果的代碼即是所謂的R程序
循環(huán)和向量化
用R寫程序
編寫自己的函數(shù)
相比python 和perl 真的死板一些, 有很多要記住并熟練使用的參數(shù)和模型
-
來源于2005重新修訂的第二版, 由華東師范大學(xué)湯銀才老師團(tuán)隊(duì)翻譯整理 ?