920 likes | 962 Views
R Programming Language R 程式語言. 林 建 甫 C.F. Jeff Lin, MD. PhD. 台 北 大 學 統 計 系 助 理 教 授 台 北 榮 民 總 醫 院 生 物 統 計 顧 問 美 國 密 西 根 大 學 生 物 統 計 博 士. R: 物件導向程式語言 R as Objective-Oriented Language. R: 基本 (R Basics). 物件命名與指派 (Naming and Assign) 變數類型 ( Type of Variables) 缺失值 (Missing Values)
E N D
R Programming LanguageR 程式語言 林 建 甫 C.F. Jeff Lin, MD. PhD. 台 北 大 學 統 計 系 助 理 教 授 台 北 榮 民 總 醫 院 生 物 統 計 顧 問 美 國 密 西 根 大 學 生 物 統 計 博 士 Jeff Lin, MD. PhD.
R: 物件導向程式語言R as Objective-Oriented Language Jeff Lin, MD. PhD.
R: 基本 (R Basics) • 物件命名與指派 (Naming and Assign) • 變數類型 (Type of Variables) • 缺失值 (Missing Values) • 資料輸入與指派 (Assignment and Input Data) • 函數 (Functions) • 工作路徑 (Workspace) • 歷史紀錄 (History) Jeff Lin, MD. PhD.
物件命名 Naming Convention • 必須以英文字母起始 (A-Z 或 a-z) • 中間可以任何文字與數字, 點 (periods) “.” • 大小寫有差別 • mydata與 MyData 不同 • 不可使用下線 (do not use use underscore “_”) Jeff Lin, MD. PhD.
物件指派 <- 指派 =(避免使用) > xyz.vector <-c(1, 2, 3) Jeff Lin, MD. PhD.
若鍵入 “return”, 而 R 出現 “+” , 表示輸入指令未完成, 若查不出錯誤處, 可議連續鍵入 “return”, 直到 R 出現 “>”符號. 如此再重新輸入 R 指令或程式. > sqrt( + + ))))) Error in parse(text = txt): Syntax error: No opening parenthesis, before ")" at this point: sqrt( )) Dumped > sqrt(100) 未完成的指令或程式 R 出現 “+” Jeff Lin, MD. PhD.
物件 Objects • 物件名稱 (names) • 物件種類 (Type of Variables): • 向量, 因子, 陣列, 矩陣, 資料框架, 時間序列, 列表. (vector, factor, array, matrix, data.frame, ts, list) • 屬性 (attributes) • 模式 (mode): 邏輯, 整數, 倍精準度, 單精準度, 複數, 文字. (numeric, character, complex, logical) • 長度 (Length):與物件的模式有關 • 物件產生 (creation): 指派數值或空物件 Jeff Lin, MD. PhD.
基本模式變數命名與指派 > a <- 49 > sqrt(a) [1] 7 > b <- "The dog ate my homework" > sub("dog","cat",b) [1] "The cat ate my homework" > x <- (1+1==3) > x [1] FALSE > as.character(b) [1] "FALSE" 數值 numeric 文字與字串character string 邏輯logical Jeff Lin, MD. PhD.
Logical (邏輯) > x <- T; y <- F > x; y [1] TRUE [1] FALSE Numerical (數值) > a <- 5; b <- sqrt(2) > a; b [1] 5 [1] 1.414214 Character 文字與字串 > a <- "1"; b <- 1 > a; b [1] "1" [1] 1 > a <- "character" > b <- "a"; x <- a > a; b; x [1] "character" [1] "a" [1] "character" 基本模式變數命名與指派 Jeff Lin, MD. PhD.
物件指派 Assignment “<-” used to indicate assignment > x<-c(1,2,3,4,5,6,7) > x<-c(1:7) > x<-1:4 Jeff Lin, MD. PhD.
算數操作 (Arithmetic Operator) Simple operations • Add: > 10 + 20 • Multiply: > 10 * 20 • Divide: > 10/20 • Raise to a power: > 10 ** 20 • Modulo: > 10%%20 • Integer division: > 10%/%4 Jeff Lin, MD. PhD.
R: 邏輯操作 與 關係比較操作 • == Equal to • != Not equal to • < Less than • > Greater than • <= Less than or equal to • >= Greater than or equal to • is.na(x) Missing? • & Logical AND • | Logical OR • ! Logical NOT Jeff Lin, MD. PhD.
缺失值 NA, NaN, 與 Null • NA或 “Not Available” • 可用在許多模式 (modes) – character, numeric, etc. • NaN或 “Not a Number” • 只用在數值模式 (numeric modes) • NULL 列表 (lists) 的長度為 0 (zero length) Jeff Lin, MD. PhD.
缺失值 Missing Values, NA, NaN, 與 Null • NA or “Not Available” • Applies to many modes – character, numeric, etc. • NaN or “Not a Number” • Applies only to numeric modes • NULL • Lists with zero length Jeff Lin, MD. PhD.
缺失值 Missing Values • NA “not available” > x <- c(1, 2, 3, NA) > x + 3 [1] 4 5 6 NA • 非數字 “Not a number” > log(c(0, 1, 2)) [1] -Inf 0.0000000 0.6931472 > 0/0 [1] NaN Jeff Lin, MD. PhD.
R: 缺失值 Missing Values • NA或 “Not Available” • NA 不是 0 • NA 不是 ““(空格, 或 空字串) • NA不是 FALSE • 任何與 NA 的計算, 可能或不可能產生 NA • > 1+NA [1] NA > max(c(NA, 4, 7)) [1] NA > max(c(NA, 4, 7), na.rm=T) [1] 7 Jeff Lin, MD. PhD.
R: 統計分析常見物件型態Common Object Types for Statistics Jeff Lin, MD. PhD.
Types of Objects • 向量 Vector • 矩陣 Matrix • 陣列 Array • 列表 List • 因子 Factor • 時間序列 Time series • 資料框架 Data frame • 函式 Function > typeof(物件名稱) 可已回傳物件型態 Jeff Lin, MD. PhD.
Mode 物件結構 (模式) • 模式 Mode • 原型模式 Atomic Mode: logical, numeric, complex 或 character • 遞迴型 Recursive Mode list, graphics, function, expression, call .. > mode()指令可以用來查看物件的模式 Jeff Lin, MD. PhD.
物件長度 (Length) • 長度 Length • vector: number of elements • matrix, array: product of dimensions • list: number of components • data frame: number of columns Jeff Lin, MD. PhD.
物件屬性 (Attribute) • 屬性Attributes • 列位名 (row name), • 欄位名 (column name), • 維度 (dimension). > row.names() > names() > str() Jeff Lin, MD. PhD.
物件類別 (Class) • 類別 Class • 物件的類別方便 {R} 進行程式寫作. • 類別可以讓 {R} 得知物件的特殊性, 使用特別的方法進行操作; 例如, 有一個物件, 其類別是資料框架, 則此物件會以特別形式列印. Jeff Lin, MD. PhD.
向量 Vector • 指包含相同 ``模式'' 的元素 (element) 組成序列. • 主要有 6 種基本模式 (mode) • logical, integer, double, single, complex, and character. • (邏輯, 整數, 倍精準度, 單精準度, 複數, 文字). • 向量是具有相同基本類型的元素序列, • 大體相當於其他語言中的 1-維度數列, • 在 R 中, 單一數值 ( scalar) 也可看成是長度為 1 的向量. Jeff Lin, MD. PhD.
向量 Vector > a <- c(1,2,3) > a*2 [1] 2 4 6 向量的產生最常用辦法是使用函式 c(),它把若干個數值或字串組合為一個向量, Jeff Lin, MD. PhD.
向量運算操作 • 算數操作 (arithmetic operator) 符號包含 • +, -, *, /, ^, %%, %/%, %*%, %o%, %x% 等. • 通常其含意是對向量的每一個元素進行運算的 ``單元運算子'' (unary) 或 ``二元運算子'' (binary),如同一般算數運用在向量. • 向運有 “長度”, 但不具有 “維度”. Jeff Lin, MD. PhD.
向量 Vectors > Mydata <- c(2,3.5,-0.2) # > Colors <- c(“Red”,“Green”,“Red”) # 文字 > x1 <- 25:30 > x1 [1] 25 26 27 28 29 30 # 數字序列 > Colors[2] [1] “Green” # 單一元素 > x1[3:5] [1] 27 28 29#多各元素 Jeff Lin, MD. PhD.
向量 Vectors > x <- c(5.2, 1.7, 6.3) > log(x) [1] 1.6486586 0.5306283 1.8405496 > y <- 1:5 > z <- seq(1, 1.4, by = 0.1) > y + z [1] 2.0 3.1 4.2 5.3 6.4 > length(y) [1] 5 > mean(y + z) [1] 4.2 Jeff Lin, MD. PhD.
邏輯檢測 抽出某一元素 刪除元素 向量運算操作 > Mydata [1] 2 3.5 -0.2 > Mydata > 0 [1] TRUE TRUE FALSE > Mydata[Mydata>0] [1] 2 3.5 > Mydata[-c(1,3)] [1] 3.5 Jeff Lin, MD. PhD.
向量運算操作 > x <- c(5,-2,3,-7) > y <- c(1,2,3,4)*10 # 對所有元素操作 > y [1] 10 20 30 40 > sort(x) # 重新排序 [1] -7 -2 3 5 > order(x) [1] 4 2 3 1 # 排順序後的位置 > y[order(x)] [1] 40 20 30 10 # > rev(x) # 反向 [1] -7 3 -2 5 Jeff Lin, MD. PhD.
c() & rev() > c(1,3,5,7) [1] 1 3 5 7 > rev(c(1,3,5,7)) [1] 7 5 3 1 Jeff Lin, MD. PhD.
length(), mode() & names() > x<-c(1,3,5,7) > length(x) [1] 4 > mode(x) [1] "numeric" > names(x) NULL Jeff Lin, MD. PhD.
seq() • seq() 產生數字序列 > seq(1:5) [1] 1 2 3 4 5 > seq(5,1,by=-1) [1] 5 4 3 2 1 > seq(5) [1] 1 2 3 4 5 Jeff Lin, MD. PhD.
seq() > 1.1:5 [1] 1.1 2.1 3.1 4.1 > 4:-5 [1] 4 3 2 1 0 -1 -2 -3 -4 -5 > seq(-1,2,0.5) [1] -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 > seq(1,by=0.5,length=5) [1] 1.0 1.5 2.0 2.5 3.0 Jeff Lin, MD. PhD.
rep() • rep() replicates elements > rep(1,5) [1] 1 1 1 1 1 > rep(1:2,3) [1] 1 2 1 2 1 2 > rep(1:2,each=3) [1] 1 1 1 2 2 2 > rep(1:2,each=3,len=4) [1] 1 1 1 2 > rep(1:2,each=3,len=7) [1] 1 1 1 2 2 2 1 > rep(1:2,each=3,time=2) [1] 1 1 1 2 2 2 1 1 1 2 2 2 Jeff Lin, MD. PhD.
sort() & rank() > x<-c(8,6,9,7) > sort(x) [1] 6 7 8 9 > rank(x) [1] 3 1 4 2 > rank(x)[1] [1] 3 > x[rank(x) = =1] [1] 6 > x[rank(x)] [1] 9 8 7 6 Jeff Lin, MD. PhD.
rank() & order() > x<-c(8,6,9,7) > order(x) [1] 2 4 1 3 > rank(x) [1] 3 1 4 2 > x[order(x)] [1] 6 7 8 9 > x[rank(x)] [1] 9 8 7 6 Jeff Lin, MD. PhD.
矩陣 Matrix • 矩陣由包含相同的元素組成的 2-維 (2-dimension) 資料物件 • 可由 matrix()產生 > x<-matrix(data=0,nr=2,nc=2) > x<-matrix(0,2,2) Jeff Lin, MD. PhD.
矩陣下標 > x <- c("a", "b", "c", "d", "e", "f", "g", "h") > x[1] > x[3:5] > x[-(3:5)] > x[c(T, F, T, F, T, F, T, F)] > x[x <= "d"] > m[,2] > m[3,] Jeff Lin, MD. PhD.
Generate a Matrix > xmat<-matrix(1:12,nrow=3,byrow=T) > xmat [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 > length(xmat) [1] 12 > dim(xmat) [1] 3 4 > mode(xmat) [1] "numeric" > names(xmat) NULL > dimnames(xmat) NULL Jeff Lin, MD. PhD.
Generate a Matrix > matrix(0,3,3) [,1] [,2] [,3] [1,] 0 0 0 [2,] 0 0 0 [3,] 0 0 0 Jeff Lin, MD. PhD.
Generate a Matrix > dimnames(xmat)<-list(c("A","B","C"), c("W","X","Y","Z")) > dimnames(xmat) [[1]] [1] "A" "B" "C" [[2]] [1] "W" "X" "Y" "Z" > xmat W X Y Z A 1 2 3 4 B 5 6 7 8 C 9 10 11 12 Jeff Lin, MD. PhD.
Diagonal Element of a Matrix > m <- matrix(1:12, 4, byrow = T) > m [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 [4,] 10 11 12 > diag(m) [1] 1 5 9 Jeff Lin, MD. PhD.
Diagonal Element of a Matrix > diag(k) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 Jeff Lin, MD. PhD.
Inverse of Matrices > m<-matrix(c(1,3,5,,9,11,13,15,19,21),3,byrow=T) > m [,1] [,2] [,3] [1,] 1 3 5 [2,] 9 11 13 [3,] 15 19 21 > solve(m) [,1] [,2] [,3] [1,] -0.5000 1.0000 -0.5 [2,] 0.1875 -1.6875 1.0 [3,] 0.1875 0.8125 -0.5 Jeff Lin, MD. PhD.
rbind() & cbind() > x<-c(1,2,3) > y<-matrix(0,3,3) > rbind(y,x) [,1] [,2] [,3] 0 0 0 0 0 0 0 0 0 x 1 2 3 > cbind(y,x) x [1,] 0 0 0 1 [2,] 0 0 0 2 [3,] 0 0 0 3 Jeff Lin, MD. PhD.