R語言筆記第二課,物件、因子、陣列
阿新 • • 發佈:2018-12-24
# 第三章 物件和他們的模式和屬性
# 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()也是一個轉制函式