最近開始學起了R語言。R語言和一般的程式語言有很大的不一樣,學起來跟當初剛學JS一樣,挺費力的。於是做這篇筆記,把最近兩個禮拜R語言的體會記錄下來。
資料型態
vector:
vector內的所有資料形態必須要一致。分別有以下三種型態numerical, character, logical。
使用c()函式進行指定賦值。
使用names()給予名稱。
matrix:
y<-matrix(1:20, nrow=5,ncol=4) cells <- c(1,26,24,68) rowname <- c("R1", "R2") colname <- c("C1", "C2") mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rowname, colname)) x[,4] #第四行 x[3,] # 第三列 x[2:4,1:3] # 第2~3列,1~3行
rbind() cbind() 也可以用來建立matrix。
除此之外,一些基本的矩陣運算R也都有支援:
t()、diag()、solve()、eigen()分別是transpose、對角化、反矩陣、求eigenvalue eigenvector。
array:
類似vector的概念,只是有加上dim()維度的概念,所以array裡面也都要放相同type的。另外,我們可以使用cbind()和rbind()來把vector合併成一個array。只是我目前還沒用過這個,也不是很懂這個的用途XD
list:
list和array是很不一樣的概念。list 是裝著一堆R物件的向量。所以list裡面可以放任何東西,這點和matrix、array、vector很不一樣。
# a string, a numeric vector, a matrix, and a scaler w <- list(name="Fred", mynumbers=a, mymatrix=y, age=5.3) # example of a list containing two lists v <- c(list1,list2) #取值方式 mylist[[2]] # 2nd component of the list mylist[["mynumbers"]] # component named mynumbers in list
Factors:
factors主要是拿來做分類的,譬如:
as.factor(vec) [1] 14 15 16 18 19 Levels: 14 15 16 18 19 # levels 表示 vec 有5種不同的分類
data frame:
data frame和matrix最大的不同是,每一行都可以有不同的資料型態。然後我們也可以用names()來給他起名字。data frame的底層其實是用很多的list構成的,也就是一個column一個list。以下是一些code example
d <- c(1,2,3,4) e <- c("red", "white", "red", NA) f <- c(TRUE,TRUE,TRUE,FALSE) mydata <- data.frame(d,e,f) names(mydata) <- c("ID","Color","Passed") # variable names myframe[3:5] # columns 3,4,5 of data frame myframe[c("ID","Age")] # columns ID and Age from data frame myframe$X1 # variable x1 in the data frame
注意,我們可以用$來refer一個column。
讀檔
getwd():顯示目前R所在的路徑,我的是家目錄。
setwd():設定目前的路徑,如果要讀某個目錄下大量的資料,就把目錄設到那裡去。
read.csv()、read.table():讀取資料表,read.csv() 裡面是包一個 read.table()的wrapper函數。
除了上面這些函式以外,還有讀各種檔案的例如json、xml、hdf5的。個人是覺得用到的時候再查一下就好了。
常用函式
剛剛發現這邊有整理一份很簡單扼要的常用函式。
http://garrettgman.github.io/distributions/
以下是我常用的,有可能會和上面重複:
paste(…, sep=””,collapse=NULL):用來串接字串,私心認為javascript的+真的是方便許多了XD。sep和collapse的差別看這篇
library():用來引入某個library。
print():印東西
mean()、sd()、min()、max()、quantile():平均、標準差、最大值,最小值、百分位數
as.numeric(),as.character(),as.logical():轉型
apply()系列(apply、lapply、sapply、tapply、mapply):apply的感覺很像functional programming。這篇解釋的蠻清楚的。這篇是中文的。
cor()、cov()、var():用來算correlation covariance variance的,wiki
return():從函式中跳出。
data frame 常用函式(當然這裡面也有部分的函式可以用在其它的type)
head()、tail():用來取frame的前幾筆或後幾筆,預設是6筆。
summary():看一下data frame的一些訊息。
nrow()、ncol():取得行數、列數
na.omit():消除含有NA的欄和列
which():參數放判斷條件,用來判定該取哪些行或列。
dplyr、tidyr
因為R原生的data frame操件有那麼一點複雜,所以就有人開發了這個套件,可以快速的進行各種data frame的tidy工作。data tidy的精神我放在下一篇。
關於我:
我是沒一村,專長和興趣是程式、主動投資、科技商業模式。可以參考我的書單和比較熱門的文章: