R基礎概念

與其說R是一套統計軟體,不如說是一種統計分析和計算的「環境」。 向量化語言;數學運算會被自動套用到vector內的每個元素

物件概念

  1. R是以「物件 (Object)」為主體的「運算式語言 (Expression Language)」,亦即以物件導向為主的程式語言。利用指派(<-)來設定物件的名稱 (name)與內容 (content)。
  2. 物件的內容由「元素 (element)」,所以物件的型態與元素的型態是不同的
  3. mode()檢視元素的類型,class()檢視物件的類型 e.g. x<-1:24; dim(x) <- c(4, 6); mode(x) ## "numeric" class(x) ## "matrix"
  4. 檢視物件的屬性/特徵(attribute);作用於一個物件的函數取決物件的屬性。
  5. length()檢視物件的長度,也就是物件中元素的數目;(非「資料字元數」;nchar()顯示資料字元數) e.g. y<- c("I", "Love", "R") class(y) ## "character" length(y) ## 3,物件中的元素個數 nchar(y) ## 每個/資料元素的字元數;可以用來辨識字數
  6. 不管是哪種物件類型,內含的元素型態可區分:
  7. 數值 (numeric) 實數/雙浮點數 整數型 (integer)、小數(decimal fraction)、科學計數(scientific notation)。
  8. 複數型 (complex)
  9. 邏輯型(logical)
  10. 字元型(character) 某些情況下即便是數值,但也要當文字處理;eg: User ID或產品編號 (但概念和factor不同,factor類似類別,並沒有唯一的限制;但User ID或產品編號就要有唯一性)

物件類型

向量(vector),亦稱集合(collection)

  • R中的向量vector並非數學上定義的向量,本身並無維度,沒有所謂行向量或列向量。c是代表結合(combination)
  • 單個向量中的元素必須是同類型
  • named vector: Bob<- c(age=27, height=187, weight=80) ;利用c()直接命名元素的名稱 name(Bob)則會傳回各維度的名稱;[1] "age" "height" "weight"
  • 假設有兩個同長度的向量,兩個向量裡每個位置相互對應的元素都可以同時個別進行運算。如果兩個長度不想相等的向量做運算,比較短的向量會被循環使用,直到長的向量裡每個元素都有一個配對為止。如果長向量的長度不是短向量的倍數,會出現警告訊息。
  • 使用[]來存取向量中的特定元素;預測第一個元素序號為1,非0 (如python)
  • min()
  • max()
  • range()向量的範圍
  • which.min()、which.max()第幾個分量是最小值或做大值
  • sort()對向量排序
  • rev()將向量按原方向的反方向排列
  • rank()每個元素在資料排序的相對位置
  • prod()向量元素的連乘積
  • mean()
  • median()
  • var()
  • sd()
  • append()在向量中新增元素 append(y, 10:15, after=3) 在y向量中第三個元素後加入10-15
  • 使用[]來存取向量中的特定元素;R預設第一個元素序號為1而非0

    陣列(array);可視為多維度的向量,須先定義維度向量

  • array(1:24, dim = c(3,4,2)) ;或是寫成 X <- 1:24; dim(X) <- c(3,4,2)

  • R會依照行的方式排列 (數據排列照不能像matrix行或列(byrow=T)?)

matrix

  • matrix(data=NA, nrow=1, ncol=1, byrow=FALSE, dimnames=NULL) byrow表示矩陣資料是要按列(byrow=TRUE)還是按行(byrow=FALSE)的順序排列 nrow列數、ncol行數、dimname幫行列命名 eg:

    x <- matrix(1:24, nrow=4, ncol=6, byrow=TRUE) x [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 2 3 4 5 6 [2,] 7 8 9 10 11 12 [3,] 13 14 15 16 17 18 [4,] 19 20 21 22 23 24 x <- matrix(1:24, nrow=4, ncol=6, byrow=FALSE) x [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 5 9 13 17 21 [2,] 2 6 10 14 18 22 [3,] 3 7 11 15 19 23 [4,] 4 8 12 16 20 24

  • nrow()傳回列數、ncol()傳回行數

  • t(x)轉置矩陣

  • % % 矩陣相乘 (若用,系統會將相同位置的兩數相乘,而非矩陣相乘)
  • crossprod(A, B)等同於 t(A)%*%B,但效率更高
  • diag() 產生對角矩陣;但如果輸入一正整數則產生對應為度的單位矩陣
  • det()計算行列式值
  • solve()傳回反矩陣
  • eigen()計算特徵向量與特徵值

資料框架(data frame)

與矩陣結構相似,但資料框架可以在不同行中存在不同的資料型態,但同行的資料型態及長度必須相同(不同行代表不同attribute,即變數,名稱由每一行的名稱來定義),資料框架的每一列視為一組觀察值(observation)或案例(case),即instance。以統計用語來說,每一行代表一個變數,每一列則代表觀察值。

id <- c(1, 2, 3, 4) age <- c(25, 30, 35, 40) sex <- c("male", "male", "female", "female") pay <- c(30000, 40000, 45000, 50000) x.dataframe <- data.frame(id, age, sex, pay)

  • R提供與Excel介面類似的編輯器,來建立或修改dataframe的值

    edit(x.dataframe)

factor

  • 類別變數(category variable);披著定量資料外殼的定性資料,以數字程式形式表現的字元類型資料(類似coding或歸類的概念,本看起來是數字,但是代表著某種特性)
  • 也可視為一種特別的向量,用於將相同長度的離散資料向量做群組(grouping)
  • 與vector很類似,但有另外的類別屬性(level)
  • 取樣分類/層次(levels);factor的level代表該factor群組內的所有離散值(不重複的元素),並賦予每個獨特的元素一個唯一的整數值。由於factor只儲存不重複的元素,可以大量減少變數的容量。
  • 字元標籤 (labels) sex=factor(c(1,1,0,0,1), levels=c(1,0), labels=c("female", "male")) 變更levels與labels,所得向量個元素設定值會發生對應變化;levels與labels有對應關係
  • 不對levels或labels進行設定時,各字元的對應數字按照字母/筆劃順序(或level順序;或者自行設定排序)依序自1開始標示/轉為數值 num <- factor(c("b", "a", "d", "c")) as.numeric(num) # 2, 1, 4, 3 ;只是把factor中的元素轉成數值,但class(num)仍然為factor
  • 一般而言,factor中level的排序並不重要。但也可設定order=TRUE來建立一個排序過的factor factor(X, levels=c(“A”, “B”, “C”), order=TRUE)

list列表

vector裡只能有相同型態的資料 list是一個以有序集合(order sequence)所構成的物件,組成可以是異質的物件 使用雙重中括號[[]]及序號值來取得list中某一位置的組成元素 family[[4]]
25 28 30 只使用一個中括弧[]及序號值,則是取得list中某一位置的組成元素及名稱 family[4]
$kid.age [1] 28 28 30

family$kid.age[2] family[[4]][2]

packages套件

install.packages("XXXXXX") library("XXXXXX") remove.packages("XXXXXX") ##移除指定套件 installed.packages() ##顯示已經安裝的套件 library() ##顯示已安裝套件的簡易資訊 update.packages() ##更新所有已安裝的套件

results matching ""

    No results matching ""