1. 程式人生 > >R語言筆記第二課,物件、因子、陣列

R語言筆記第二課,物件、因子、陣列

# 第三章 物件和他們的模式和屬性

# R 操作的所有都是物件
mode(c(12,3))
# "numeric"
length(c(1,2))
# "2"
z <- 0:11
z

# 學會使用一系列as.something()的函式
digits <- as.character(z) # 全部轉化為字串
digits
d <- as.integer(digits)
d

e <- numeric() # 建立一個數值模式的空間結構e
e[3] <- 12 # 通過下標進行賦值,前面用NA填充,自動填充長度的方法
# e  NA NA 12

a = scan() # 接受多個輸入值
# 刪減一個物件的大小隻需要用賦值操作 a = 1:10 a <- a[2 *1 : 3] # 得到索引2,4,6下標的對應值 a length(a) <- 2 # 得到a的前2個值 a # 讀取和設定屬性 # attributes(a) # 給出物件的定義的非內在屬性 # attr(boject, name) #選擇特定的屬性 # attr(a,"dim") <- c(10,10), 沒有實現成功 # 物件的類 用class()函式檢視物件的類 # 涉及泛型函式和類 class(logical) class(matrix) # unclass()臨時去掉一個物件的類作用
winter = c(12,'2') unclass(winter) # --------------- 有序因子和無序因子-------- # 因子: 是對一個等長的其他向量元素進行分組的向量物件。有序和無序兩種 state <- c("tas","qld","sa","sa","sa","vic","nt","act","qld","nsw","wa","nsw","nsw", "vic","vic","vic","nsw","qld","qld","vic","nt", "wa", "wa","qld", "sa", "tas", "nsw", "nsw"
, "wa","act") statef <- factor(state) statef levels(statef) #就是所有的相同的名字合到一起,作為一個類別,有點字典的味道 incomes <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56, 61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46, 59, 46, 58, 43) incmeans <- tapply(incomes, statef, mean) # 這兒就體現類了什麼因子,以及因子的用處, # 自動合併相同位置的值,做處理,mean,sum ect # 有點類似於pandas中的apply()函式 incmeans insums <- tapply(incomes, statef, sum) insums # 計算上述資料的標註差 stderr <- function(x) sqrt(var(x)/length(x)) sd() #標準差 incstderr <- tapply(incomes, statef, sd) incstderr incstderr1 <- tapply(incomes, statef, stderr) incstderr1 # 計算平均收入的95%信度區間 # 有序因子ordered(),字串的大小有序排列 ordered(state) # ----------- 5 陣列和矩陣 ------------ # 向量和陣列的差別,向量只有在定義類dim屬性後才能作為陣列在R中使用 x <- c(1,2,3,4,5,6,7,8,9,10,11,12) dim(x) <- c(3,4) # 此時x是二維的陣列或者說是矩陣 matrix(x,4,3) array(x) x[2,] x <- array(1:20, dim=c(4,5)) x i <- array(c(1:3,3:1),dim=c(3,2)) # 3X2的索引矩陣 x[i] <- 0 x # array(data,dim()) h = 1:24 z <- array(h,dim=c(2,3,4)) #建立一個2X3X4的陣列,一般情況下用0進行填充 # 如果h 的長度小於24,它的元素將會被迴圈使用直到長度為24 D <- z+z #元素級別上的運算 D # 陣列的外積運算, 運算子 a %o% b, a的每一個元素乘以b的所有元素 a <- array(1:8,dim=c(2,4)) b <- array(1:8,dim=c(2,4)) c <- array(1:4) d <- array(1:4) a %o% b c %o% d ab <- outer(a,b,"*") #另一中外積的表達形式,乘法符號可以被任意雙變數函式替代 f <- function(x,y) cos(y) / (1+x^2) z <- outer(c,d,f) z e <- outer(0:9, 0:9) fr <- table(outer(e,e,"-")) plot(as.numeric(names(fr)),fr,type="h",xlab="Determinat",ylab="Frequency") # 廣義陣列的裝置 aperm(a,perm) #perm可以使{1....k}的一個排列,k是a的下標數目 # a: 2X4 b <- aperm(a,c(2,1)) # 裝置運算,按軸進行轉制 t(a) # 函式t()也是一個轉制函式