「生信」R for Beginners——R入門筆記

目錄

  • 首先
  • 導(dǎo)言
  • 基本原理與概念
    基本原理
    賦值分配(assign)等操作
    在線幫助
  • R的數(shù)據(jù)操作
    對象
    在文件中讀寫數(shù)據(jù)
    存儲數(shù)據(jù)
    生成數(shù)據(jù)
  1. 規(guī)則序列
  2. 隨機(jī)序列
    使用對象
  3. 創(chuàng)建對象
  4. 對象的類型及轉(zhuǎn)換
  5. 運(yùn)算符
  6. 訪問一個對象的數(shù)值: 下標(biāo)系統(tǒng)
  7. 訪問對象的名稱
  8. 數(shù)據(jù)編輯器
  9. 數(shù)學(xué)運(yùn)算和一些簡單的函數(shù)
  10. 矩陣計(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)等操作

  • 賦值. 三者有差別

    1. ->
    2. <-
    3. =
  • 顯示內(nèi)存中所有對象

    1. ls() #只輸出對象名稱
    2. ls(pat="X") #指定顯示某個對象及其賦值, pat即pattern
    3. ls(pat="^X") #正則表達(dá)式
    4. ls.str() #輸出對象名稱+賦值

在線幫助

  • 最常用

    1. ?ls()
    2. 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ǔ)充:

    1. read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".", fill = TRUE, ...)
    2. read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",", fill = TRUE, ...)
    3. read.delim(file, header = TRUE, sep = "\t", quote="\"", dec=".", fill = TRUE, ...)
    4. 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ù):

    1. seq(x,x,x)
    2. scan()
    3. rep(x,x)
    4. sequence(x:x)&sequence(c(x,x,x,...))
    5. 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==y

    2. &和|作用在對象中的每一個元素上并且返回和比較次數(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)

    列namescolnames(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ì)算

  • 矩陣相乘計(jì)算規(guī)則

  • 上下合并矩陣

    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()開啟繪圖窗口

  • 圖形分割(也不知道放到這有啥特殊的意義)

    1. 構(gòu)建矩陣matrix()

    2. layout(矩陣)

    3. 展示分隔結(jié)果layout.show()

    4. 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ù)和模型


  1. 來源于2005重新修訂的第二版, 由華東師范大學(xué)湯銀才老師團(tuán)隊(duì)翻譯整理 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容