打算學習一下r語言(windows下載),不知道從什么地方開始學習,加上本人的數理統計基礎比較薄弱,所以就漫無目的的從網上找教程。
其實我逛的最多的網站還是知乎,讀了好多很好的答案后,我選擇了兩本書,《153分鍾學會r》《r語言實戰》。前者大概掃了一眼,不太適合邊看書邊敲代碼(我個人比較喜歡這種),所以后者就比較適合我,這套書還是比較適合菜鳥看的,我還看過《集體智慧編程》,很不錯。
下面開始了第一段程序。(博客園沒有r語言選項,只好用plain txt了)
age <- c(1,3,5,2,11,9,3,9,12,3) weight <- c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1) mean(weight) plot(age,weight) q()
代碼很簡單,不多說了。
這段代碼要注意的地方有:正斜杠,小數點后三位,均勻分布。
setwd("F:/R Code") #如果不存在需要使用dir.create()創建目錄 options() options(digits=3) x<-runif(20)
#摘要統計量 summary(x)
#直方圖 hist(x) savehistory() save.image() q()
接下來就要討論r語言的數據結構了
r語言包含了4中數據結構:向量,矩陣,數組和數據框。
1.向量是一維的
a <- c(1,2,5,3,6,-2,4)
2.矩陣是二維的
cells <- c(1,26,24,68) rnames <- c("R1","R2") cnames <- c("C1", "C2") mymatrix <- matrix(cells,nrow=2, ncol=2, byrow=TRUE, dimnames=lilst(rnames,cnames)) #按行填充
3.數組可以是多維的
dim1 <-c("A1","A2") dim2 <- c("B1","B2","B3") dim3 <- c("C1","C2","C3","C4") #array(vector, dimanesions,dimnames) z <- array(1:24, c(2,3,4), dimnames=list(dim1,dim2,dim3))
4.數據框 這個就是大雜燴了
patientID <- c(1,2,3,4) age <- c(25,34,28,52) diabetes <- c("Type1", "Type2", "Type1", "Type1") status <- c("Poor","Improved", "Excellent", "Poor") patientdata <- data.frame(patientID, age, diabetes, status)
取數據框中的某一個元素:patientdata$age,如果不想每一次都輸入patientdata$,可以使用attach() detach()或者單獨使用函數with()來簡化代碼。
#概要的統計數據 summary(mtcars$mpg) #作圖 plot(mtcars$mpg, mtcars$disp) plot(mtcars$mpg, mtcars$st) #以上代碼等同於下面的代碼 attach(mtcars) summary(mpg) plot(mpg, disp) plot(mpg, wt) detach(mtcars)
然后使用detach()將數據框從搜索路徑中移除。
mpg <- c(25, 36, 47) attach(mtcars) #attention 原始對象用於優先權 plot(mpg, wt) mpg
上面說的是attach,接下來看看with怎么用
with(mtcars, { summary(mpg, disp, wt) plot(mpg, disp) plot(mpg, wt) })
with {} 之間的語句都是針對數據框mtcars的,所以這樣就不用擔心上面的名字沖突的問題了,而with的最大問題是{}內的操作都是局部的,有點像函數的內部變量,傳遞不出去,看個例子
with(mtcars, {
stats <- summary(mpg)
stats
})
#下面這句話將產生錯誤(Error:object 'stats' not found)
stats
但是這種缺點可以克服嗎?使用<<-賦值就可以了。不知道R語言為什么會有這樣的設計。