為什么學(xué)這本書:
這本書我剛開始學(xué)習(xí)R的時(shí)候草草看過,名曰經(jīng)典入門書籍,實(shí)則對(duì)R零基礎(chǔ)非常不友好在學(xué)習(xí)《R for Data Science》和《Data Analysis for the Life Sciences》兩本書時(shí)嫡锌,我發(fā)現(xiàn)時(shí)常需用編程思想解決核心問題伪冰,但前者側(cè)重tidyverse包數(shù)據(jù)處理繁疤,后者已是R統(tǒng)計(jì)應(yīng)用钠惩,所以需要一本書幫助我撿起編程思想,以及帶我進(jìn)一步了解R編程的魅力
所以從今天就開始重溫這本書苞笨,存在即合理
前置知識(shí)
- 批處理模式
pdf('dat.pdf')
hist(rnorm(100))
# 關(guān)閉正在使用的圖形設(shè)備
# 實(shí)際上就是把文件寫入磁盤的機(jī)制
dev.off()
- 基礎(chǔ)知識(shí)點(diǎn)
c 表示連接(英文是concatenate)
x <- c(1,2,4)
y <- c(x,x,3);y
# [1] 1 2 4 1 2 4 3
R向量的索引(下標(biāo))是從1開始
y[3]
# [1] 4
x[2:3]
# [1] 2 4
退出R
q()
- 內(nèi)置數(shù)據(jù)集
data()
函數(shù)入門
# 統(tǒng)計(jì)奇數(shù)
oddcount <- function(x) {
k <- 0
for (n in x){
# 取模 %%
if (n %% 2 == 1) k <- k + 1
}
return(k)
}
var <- c(1,2,3,4,5,6,7,9)
oddcount(var)
在上述例子中:
x
:形式參數(shù)
var
:實(shí)際參數(shù)
向量入門
- 標(biāo)量
單個(gè)的數(shù)债朵,實(shí)際上是一元向量
- 字符串簡單處理
u <- paste('abc','de','f');u
# [1] "abc de f"
v <- strsplit(u,' ')
v # v[1]
# [[1]]
# [1] "abc" "de" "f"
v[[1]]
# [1] "abc" "de" "f"
列表入門
x <- list(u=2,v='abc');x
# $u
# [1] 2
#
# $v
# [1] "abc"
列表的常見用法是把多個(gè)值打包組合在一起,然后從函數(shù)中返回
hn <- hist(Nile); hn
數(shù)據(jù)框入門
d <- data.frame(list(kids=c('Jack','Jill'),
ages=c(12,10)))
# dataframe內(nèi)部本質(zhì)是list構(gòu)成的瀑凝,可省略
d <- data.frame(kids=c('Jack','Jill'),
ages=c(12,10))
類入門
以S3類為例
hn <- hist(Nile)
print(hn)
- attribute包含列表的所屬類
類需要用在泛型函數(shù)中序芦,泛型函數(shù)代表一個(gè)函數(shù)族,其中每個(gè)函數(shù)都有相似的功能粤咪,但是適用于某個(gè)特定的類谚中,如
summary()
和plot()
拓展案例一
—— 考試成績的回歸分析
examsquiz <- data.frame(
V1 = c(2.0,3.3,4.0,2.3,2.3,2.4,2.4,2.6,3.3,3.1,3.2),
V2 = c(3.3,2.0,4.3,1.2,1.0,2.4,3.2,3.3,1.7,3.2,2.9),
V3 = c(4.0,3.7,4.0,3.3,3.3,4.1,4.0,3.9,2.9,3.3,3.1)
)
# V1 期中,V2 期末寥枝,V3 平均小測
# 用期中成績預(yù)測期末成績
lma <- lm(examsquiz$V2 ~ examsquiz$V1)
- 可以用attributes列出lm類實(shí)例lma的全部組件
attributes(lma)
# $names
# [1] "coefficients" "residuals" "effects" "rank" "fitted.values"
# [6] "assign" "qr" "df.residual" "xlevels" "call"
# [11] "terms" "model"
#
# $class
# [1] "lm"
- 查看結(jié)果
lma$coefficients
# (Intercept) examsquiz$V1
# 0.8921636 0.6047314
print(lma) # 等價(jià)于 lma
#
# Call:
# lm(formula = examsquiz$V2 ~ examsquiz$V1)
#
# Coefficients:
# (Intercept) examsquiz$V1
# 0.8922 0.6047
- 使用print只返回上述結(jié)果是由于泛型函數(shù)print調(diào)用內(nèi)部的print.lm()來完成
- 可以用str(lma)查看詳細(xì)結(jié)構(gòu)宪塔,用summary(實(shí)際是summa.lm())獲取詳細(xì)摘要
- 多個(gè)變量線性擬合
lmb <- lm(examsquiz$V2 ~ examsquiz$V1 + examsquiz$V3)
互聯(lián)網(wǎng)資源
R包更新
- win
install.packages("installr")
require(installr)
updateR()
- mac
install.packages('devtools')
library(devtools)
install_github('andreacirilloac/updateR')
library(updateR)
updateR(admin_password = 'Admin user password')