R語言的簡介
這學期我幫趙老師上了一堂動態樣區概論,大致上這堂課我主要講的都是方法論,從簡單的動態樣區介紹一直到動態樣區內分析方法,漸漸地這堂課也上了快一個學期,我也在想說是不是能狗整理一些甚麼資訊出來。於是我打開了塵封已久的部落格,嵌入我自己本身有在使用的R Markdown,有目的性地去解決其中大部分人的問題。內容不一定會和我課堂所講的相似,但會提供我自己的想法與code,提供所有人參考與評論。藉此有一個小小平台可以解決大家對於「R很困難」的這個天大危機。
我自己碰R已經有將近8年(幹好久),很多時候都是目的性地去解決很多科學需要的圖跟表,因此往後的貼文,也會根據"目的"來去作出相關的分析、繪圖。到了最後,其實你就會發現,我們幾乎都使用那幾樣工具,其實沒有到多困難也沒有到多麼尖澀難懂。由於自己已經碰R碰了很久,有時真的要講起基礎的東西來,還是要花很長的一段時間,這篇文多半提供許多教科書上會有的教材,網路上真的超多人在教,我也是東抄抄西剪剪的拼湊出來。希望這篇能夠給剛進入R語言世界的人,有更...深入一點點的感受。
基礎的R語言
基礎的R語言
Chen-Chia Ku
2022/5/8
R 語言的介紹
什麼是R語言
R語言是由Ross Ihaka 以及Robert Gentlman 在University of Auckland基於John Chambers開發的S程式語言建構而的 免費 且 開源 的統計與繪圖軟體。
R語言是統計程式語言:
- 程式語言是人與電腦溝通的工具,須嚴謹的邏輯語法, 電腦才會正確執行命令
- 命令電腦做事的語言
R 以及R studio有什麼不一樣
- R Studio是R的附加組件:
- 使用R的時候,應與R studio一起使用
- 因為R本身非常麻煩,無法將曾經寫過的code紀錄並貯存與共享
- R studio2的介面友善,可儲存並分享code紀錄。
- 由於R Studio 是R的附加組件,因此必須先下載R,再下載R Studio。
- 使用R Studio進行數據分析時,R不能在電腦解除安裝
- 即使…R可能從安裝之後你都不曾打開,再怎樣…只要你要用R studio分析,R就是要在你的電腦裡。
- R Studio是R的附加組件:
學習R語言是指數型成長
- 代表學習的路途很長
- 代表學習的路途很長
但R語言近期越來越活耀
- 有越來越多學術文章開始使用R語言進行統計分析
- 有越來越多學術文章開始使用R語言進行統計分析
為什麼要使用R
- R是免費下載,免費使用的軟體
- SAS和SPSS是付費軟體,且需要認證才能夠使用。
- R可以載在Windows、Mac以及Linux等作業系統。
- 相較於其他的軟體,R使用的硬碟空間較小。
- R是開源軟體
- 使用者可以使用Packages來擴展R的功能多樣性,像是樂高組合一樣。
- R的功能不斷被所有使用者擴展,因此不會大規模更新來讓R的功能便更強大。
- 利用R來進行數據處理,非常簡單。前提是要會寫code。
- 可以匯入其他軟體形式的資料,例如Excel、SAS以及SPSS
- 可以簡單地建立新的數據子集、新變量、選擇特定觀察質和變量。
- 這些工具具有很大的靈活性與變動性。
- 在R裡面要進行數據的視覺化,非常方便且廣泛
- 可以用來繪製出自己想要表達的圖形與表格,且藉由不同的code可以調整不同樣式,非常靈活且方便。
- 科學家們可以藉由R的進階功能,
- 可以用來進行混合模型的建立、主成分分析、因子分析、結構方程式
- 可以提高對於統計的理解
- 理解統計是透過真實的數據分析
- 由於對數據分析的廣度以及R的操作方式,R將促進使用者對統計數據得更好理解。
- 可以簡單地分享R的輸出
- 可以輕鬆地選擇你想要輸出的圖檔或檔案
- 容易保存在R中的所建立的圖形、數據集等
- 由於R使用筆記本進行編輯,分析的過程容易重現且易於分享
- 可以使用R Markdown將結果和代碼保存在帶有注視的報告樣式中。
- R將可以使分析的表單,進行重現性
- 使用筆記本所記錄的所有分析,都可以被記錄下來,並且可以分享、並且在他人的電腦裡重現。
- 總結R語言的功能
- 資料統整 (dplyr)
- 資料視覺化 (ggplot2)
- 資料統計分析 (vegan)
- 資料模擬
R語言的使用指令
- R語言是一種互動式的指令視窗,可分為以下兩種:
- 運算式 (expression):
1+2
log(20)
sum(1+2)
- 指派運算或賦值運算
x <- 1 + 2
y <- 4 - 5
x; y #把x和y叫出來
## [1] 3
## [1] -1
工作路徑的設置
- 任何 R語言 工作中產生的物件或暫時檔案, 都會在電腦的 工作目錄 或 工作路徑 (working directory)
- R語言 指令內的路徑 (PATH) 分隔為 / (例如, C:/RData/)或是用 ∖∖ (例如, C: ∖∖ RData)。
- 設定工作目錄:
- 指令 getwd(), 可以顯示當前工作路徑。
- 指令 setwd(), 可以改變當前工作路徑。
> getwd() # show your current working directory
> setwd("C:/RData/")
> getwd()
> ## [1] "C:/RData"
R語言的基本架構
- Package 套件
- Functions 函式
- Arguments 引數
Package: 套件
- 特定的統計分析方法許多專用的函式集合成一組。許多學者針對特定分析,寫成專用的 R語言 函式, 學者常將這些特定的統計分析方法專用的函式集合成一組 套件 (package)
- survival 套件:專用來進行存活分析
- tidyverse 套件:資料科學上大量使用
- R語言的套件數目一直在快速稱加,個別套件內則有不同的函式。
- 標準套件 base {R}:可以進行一些標準統計和繪圖所需的的基本函數, 在任何 {R} 的安裝版本中, 都會被自動安裝與載入。
- 貢獻套件(contributed package): 許多學者為 {R} 提供了基本套件以外的套件
- 安裝套件:
- 第一次使用某一特定功能的套件,需要事先安裝套件
- 盡可能連接網路才能安裝套件,以下列出常用的方法
- 使用 {RStudio} 內設套件所在的位置
- 由 {RStudio} 右下套件視窗. 使用滑鼠選擇 Packages
- 使用函式 install.packages()安裝所需的套件
install.packages("ggplot2")
Function: 函式
- 函式是一種物件,是指令的集合,執行特定功能或運算工作的指令
- 擴展 R語言 在程式語言的功能性與便利性
- 函式內通常需輸入 引數 (argument) 例如,統計常用函式 mean(), var(), sd(), log() 等
x.vec = c(1:5)
x.vec # show x.vec
mean( x.vec) # function mean() calculate mean, return a scalar
var( x.vec) # function mean() calculate variance
log(x.vec) # take log for all elements in vector x.vec
Arguments:引述
- 一個函式內通常需輸入 引數 (argument) 或是 統計公式, 統計模型, (formals)。
- 引數可以是一個以上,引數可以是數值、文字、資料框架或R語言的任何物件。
- 必要引數 (required argument):有些引數一定要輸入。
- 自選引數 (optional argument):有些引數可以不用輸入
- 省略引數 (ellipsis argument)
R語言的物件
- R語言是以物件導向為主的程式語言
- 在 R語言中, 資料或運算指令以具有名稱的 物件 (object), 形式儲存
- 向量 (vector)
- 矩陣 (matrix)
- 陣列 (array)
- 列表 (Lists)
- 資料框架 (data frames)
向量
- 數值型(Numeric)
x1 <- 10.1
x2 <- 10
class(x1)
- 整數向量 (Integer)
- 邏輯型 (Logical):以 TRUE (T) 或 FALSE (F) 呈現。
- 複數型 (Complex)
> x = 3+5i
- 字串型 (Character)
ca <- "yes"
cb <- "this is a book."
ca; cb
- 向量產生函式 c()
- 輸入簡單的向量資料, 可以用函式 c() 指令. c()為 concatenate (連接), 將數值或文字連接成向量.
x.vec <- c(1/1, 1/2, 1/3, 1/4, 1/5)
flavors.vec <- c("chocolate", "vanilla", "strawberry")
x.vec
flavors.vec
- 向量基本運算的操作符號
# 數值運算
1 + 2 + 3
3 * 7 * 2
4/2
2 * 3 + 4
2 * (3 + 4)
(3 + 11 * 2)/4
x.complex <- (8+3i)+(1+2i); x.complex
# 向量的運算
x.vec <- 1:5
y.vec <- c(-1, -2, 0, 2, 4)
z.vec <- c(2, 2, 3, 3, 4)
x.vec + y.vec
x.vec - y.vec
x.vec * 2
x.vec * y.vec
x.vec/2
x.vec/y.vec
x.vec^2
x.vec^z.vec
y.vec/2
y.vec/x.vec
#
y.vec %% 3 # modular arithmetic remainder
y.vec %/% 3 # integer division
y.vec %/% x.vec
- 因子物件與類別變數 Factor
- 因子物件 (factor) 是處理 類別資料 (categorical data) 的一種有效的方法,將變數值分成互斥的類別水準,在類別變數定義中的特定幾種類別水準是否有大小差距,分成以下兩種:
- 順序尺度:指同一變數內的類別水準有 輕重, 大小, 強弱, 好壞等級順序之資料
- 疼痛有4種情境:無、輕度、中度、重度
- 癌症有4期:1、2、3、4期
- 有順序性,但數字本身不能用來做運算
- 順序尺度:指同一變數內的類別水準有 輕重, 大小, 強弱, 好壞等級順序之資料
- 名目尺度:將變數值分成互斥的類別水準, 同一變數內的類別水準並無量化大小的差別。
- 拇指為1,食指為2,中指為3,無名指為4,小指為5
- 二元變數:存活為1,死亡為0
- Factor()來讓數值設定成因子
- factor(x = character(), levels, labels = levels,
exclude = NA, ordered = is.ordered(x), nmax = NA)
- factor(x = character(), levels, labels = levels,
- 因子物件 (factor) 是處理 類別資料 (categorical data) 的一種有效的方法,將變數值分成互斥的類別水準,在類別變數定義中的特定幾種類別水準是否有大小差距,分成以下兩種:
> sex <- c("male", "female", "male", "male", "female"); sex
> class(sex)
> sex <- as.factor (sex); sex
> class(sex)
矩陣 (matrix)
- 矩陣 (matrix) 物件由包含相同的元素 (模式, mode) 組成的2 -維度 (2-dimension) 資料物件
- 矩陣具有 維度 (dimension) 之屬性,列 × 欄 ,用 函式 matrix().
x.mat <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2) # one row first
x.mat
dim(x.mat) #檢視矩陣的維度
y.mat <- matrix(c(1, 2, 3, 4, 5, 6), ncol = 2); y.mat
z.mat <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, byrow = T)
z.mat
- 矩陣的下標索引:利用中括號存取列、行的資料元素
- matrix.name[ , j] 可存取矩陣中的第 j 欄 ( j th column)
- matrix.name[i, ] 可存取矩陣中的第 i 列 ( i th row)
> m.mat <- matrix(c(1:12), 3, 4); m.mat
> m.mat [,2]; m.mat[1,]; m.mat[2,3]
> m.mat [2,3] <- 30
向量與矩陣的合併: rbind() 與 cbind()
> n.mat <- matrix(c(28:39), 3, 4); n.mat
> cbind(n.mat, m.mat)
> rbind(n.mat, m.mat)
陣列 (array)
- 物件也由包含相同模式 (mode) 的元素組成的p -維資料物件可使用函式 array() 產生陣列
a.vec <- 1:24; a.vec
b.array <- array(a.vec, dim = c(4, 3, 2),
dimnames = list(c("x1", "x2", "x3", "x4"),
c("y1", "y2", "y3"),
c("z1", "z2")))
b.array
mode(b.array)
dim (b.array)
b.array[3, 2, 1]
b.array[2, ,]
b.array[,2 ,]
b.array[, ,2]
列表物件(list)
- 列表 (list) 是一個特殊的 向量,可以包含不同屬性、不同長度的數值、文字、向量與矩陣等。
- 使用函式 list() 將個別成分組成列表
- R語言許多統計分析的結果常常包含 不同物件,例如迴歸模型分析包含 參數估計、變異數分析、預測值與殘差,每一成分的長度與模式不一,模型分析產生的結果最後多以列表儲存。
x.vec <- 1:4
y.vec <- c("Male", "Female")
z.mat <- matrix(1:9, nrow = 3, ncol = 3)
xyz.list <- list(x.vec, y.vec, z.mat)
xyz.list
id.vec <- c(1, 2, 3, 4)
age.vec <- c(35, 55, 45, 25)
sex.vec <- c("Male", "Male", "Female", "Female")
disease.vec <- c("Yes", "No", "No", "Yes")
x.list <- list(
id = id.vec,
age = age.vec,
sex = sex.vec,
disease = disease.vec)
x.list
資料框架 (data.frame)
- 資料框架的主要用途是用來儲存一個資料檔所有的變數與觀察值。各行的向量長度必須相等,資料框架可以視為矩陣(matrix)或是矩陣(matrix)和列表(list)的混合型態
- 使用函式 data.frame() 將資料儲存成資料框架物件. 輸入時須注意每個變數之觀測值數目 (向量長度) 都必須相等, 若有缺失值, 須先將缺失值符號輸入在向量內
StuDF <- data.frame(StuID=c(1,2,3,4,5), ##欄位名稱=欄位值
name=c("小明","大雄","胖虎","小新","大白"),
score=c(80,60,90,70,50),
sex=as.factor(c("M", "F", "M","M", "F")))
StuDF
class(StuDF)
str(StuDF)
StuDF$name
StuDF$sex
資料輸入與輸出
- read.csv():原始資料是以逗號做分隔的檔案,副檔名通常為.csv
- 輸入格式:your.dt <- read.csv(“your path”)
- 輸出資料:write.csv(your.dt, “your filename.csv”)
- 注意:資料會儲存在原先設定的路徑,可以用 get.wd()得知目前路徑
read.csv("D:/..../....")
write.csv(StuDF, "StuDF.csv")
留言
張貼留言