大家好,這是從知乎《一個大學生的日常筆記》中遷移過來的R語言教程的第一篇 。
這一份筆記follow了兩本非常優秀的R語言教材,分別是Robert I.Kabacoff的《R語言實戰》和Peter Dalgaard的《R語言統計入門》,兩本教材的思路有所不同,我會根據我自己的思路盡量降低學習門檻,綜合來寫教程 。(畢竟提高了門檻,我就不知道自己在寫什么了……那就真的沒卵用了……)
閱讀教程的時候我有自己的思路,看過我的LaTeX入門筆記的同學們會明白,如果我想到了一些可能會讓入門新手迷糊的地方,我會以注意:這樣的形式去標記出來,而且有的時候,可能這些小插曲更加重要,請不要忽略它們 。
例子大部分都是摘抄的,但是我會做一些解釋和細節上的調整,同時考慮到代碼規范的問題,我很多例子不會提供符號可選的余地,比如"和',用于標記字符都可以,但是代碼規范推薦使用"
目前我已經是準大二學生,統計的先修課只有一門學校上的《概率論與數理統計》,事實上,這門課學完之后,R的大部分內容就已經可以上手操作了 。因此我們不會在這門課程已有的理論部分下功夫去解釋 。但是,礙于我自己本科生的視野,我們不會把太復雜,或者根本不可能涉及到的的內容搬到這里,因此這對于真正的statistician,或者是統計學專業的大牛來說,可能最多只是一份入門筆記而已 。
不過也還是有些亮點的,我可能會在教程里夾雜點別的語言的新奇玩意做些互相的對比2333
引言到此為止,下面我們開始正題 。
目錄R語言環境初探一些基本的素養和操作賦值向量索引矩陣數組小結R語言環境初探細心的同學可能已經看到了封面的那個圖,那個就是我們推薦下載的R語言編輯器——Rstudio,但是這僅僅是個編輯器,必須下載安裝真正的R語言編譯器才能夠運行 。至于如何下載——百度搜索R和Rstudio關鍵字就好 。那兩個玩意的圖標大概長這樣

文章插圖

文章插圖
我們主要使用的編輯器是Rstudio,但是為了教程的完整性(integrity),這里展示一張R語言的打開界面

文章插圖
輸入一行命令試試?
plot(rnorm(1000))(居然沒提供R語言的選項……)
系統會為你畫一張圖

文章插圖
這是一張含有1000個按正態分布排列的隨機數的圖 。
R的環境到此結束,下面我們回到Rstudio來看看

文章插圖
我們可以看到Rstduio有四個區域 。分別的功能是
左上角,是Rstudio的腳本區域(但是遠不止寫腳本那么簡單,其實還可以用來寫Rmarkdown,RNotebook等,這些是很實用的插件,但這里我們不詳談)左下角,是命令行(command)窗口,剛才我們在R中展示的窗口就是這個 。右上角是R的目前的變量環境右下角是R的畫圖,裝包,瀏覽文件的區域 。可以看出,綜合的功能是比R要強大很多的,而且根據我們網站組的大佬的反應,這玩意其實是一個html……也就是說你會JS你就可以惡搞它的界面啦
對了,在你關掉R/Rstudio的時候,系統會問你是否要保存空間映像,那個其實就是保存歷史記錄,方便以后繼續使用而設置的 。
一些基本的素養和操作R語言是一個統計語言 。統計數據離不開一個良好的用于儲存的結構和標識 。我們會先從它的基本操作講起,在其中夾雜著數據類型,數據框等大量的結構和細節 。
首先說說幫助文檔
R語言和C/python不一樣,R語言非常瑣碎,因此seek for help是必要的,但是R的official document很難懂,因此不推薦拿那個去當作你學習的教程 。我們推薦的是以下三種尋求幫助的命令
help("function") or ?functionhelp.search("function") or ??functionexample("function")第一個是查函數的幫助文檔,第二個是以某一個function為關鍵字搜索幫助文檔 。第三個會給出某一個函數的使用示例 。在對函數不熟悉的時候一定要學會使用它 。
不管是什么樣的計算機語言,賦值都是最基礎的工作 。但是賦值符號不是C里的=,而是<-,比如
r <- 2注意:用=賦值是不會被編譯器報錯的,但是由于這個語法不標準,所以有的時候會出問題 。
隨著賦值而來的就是數值運算,但是我們不強調那種單變元的數值運算,R有個很強大的功能是向量化操作(當然matlab也有) 。(向量理解為一系列變量的按序組合(比如數值向量可以理解為數列)就好)比如說給予五個人身高體重的例子,我們計算一個BMI 。
A <- c(1.84,1.74,1.65,1.58,1.81)B <- c(86.2,65,51.5,45,56)BMI <- (B/(A^2))BMI最后顯示的結果是

文章插圖
確實是一個向量 。
注意:R語言構造向量的方法是c(...)
注意:如果不輸入某一個變量的名稱,R默認是不顯示結果的,因此我最后一行又加了一個BMI變量名顯示它 。
注意:我們推薦寫多行R代碼的時候使用腳本,之后在Rstudio中,腳本區域的右上角有三個按鈕,第一個run是逐行運行代碼,第三個source是運行全部代碼(但是要在下拉框選擇source with echo,否則依然顯示不了結果),大家注意回去找找看 。
注意:如果你真的點擊了source去運行代碼的話,可以在command區域看到這樣的命令
source('C:/Users/Asus/Desktop/A.R')拿出來說的原因是想強調:如果你要輸入一個文件路徑,一定要輸入正斜杠/,因為反斜杠是轉義字符(escaped character),在""中間輸入字符,如果想讓它打印出",就可以輸入\" 。
我們回到向量這個問題上來
常用的R的數據類型有三種:數字,字符,邏輯真假(當然還有個缺失值類型,我們在之后會說) 。因此我們也可以創建字符和邏輯向量 。
關于字符向量,我們列舉下面三個例子
c("A","B","C")cat(c("A","B","C"))cat(c("A","B","C"),'\n')顯示的結果如下

文章插圖
哎?二和三有什么區別嗎?
如果你在R中運行的話,第二行的命令是默認不換行的,所以就會出現

文章插圖
的情況,不過在Rstudio里,這種情況得到了改善 。
注意:cat是連接 輸出的函數,而c只負責連接,在例子中,cat可以消除字符串的""符號 。你可以連接任何東西,包括向量 。
注意:R的向量要求內部的所有元素數據類型相同 。如果通過cat/c連接兩個不同數據類型的向量,系統會進行強制轉換 。比如
A <- c("A","B","C")B <- c(1,2,3)c(A,B)結果留給大家自己觀察 。(這里原來出了一處錯誤,已經修正,謝謝
@快走姑娘
提醒)
和數值運算類比的就是邏輯運算,但是我不打算在這里先說這些 。
伴隨著向量的就是索引,目的自然是為了取用這些元素 。索引的方法是[],舉2個例子
A <- c("A","B","C")A[2]B <- c("A"=1,"B"=2,"C"=3)B["B"]顯示的結果如下

文章插圖
注意:向量內的元素是有序的,這里A[2]索引的就是第二個,不是程序員認為的第三個!
注意:第二個例子中,我們相當于人工設置了索引(在python里,有個專門的數據結構叫字典(dict))為"A","B","C",它們叫這些變量的名稱(name),一一對應1,2,3 。和自然索引1,2,3不同的是,這里的人工索引在查看變量的時候會顯示 。
注意:索引也可以索引一個向量,也就是索引多個元素(和matlab一樣),比如說,試著運行一下下面這個命令 。
A <- c("A","B","C")A[c(2,3)]結果留給你們自己去發現 。
注意:索引也可以是負索引!它不是python里“倒數第幾個”的含義,它的意思是“索引除標記以外的所有元素” 。在數據清洗中非常常見,可以用一個例子去幫助理解
A <- c("A","B","C")A[-c(2,3)]自己去敲敲代碼看看結果吧
注意:你甚至可以使用索引進行賦值,即使它已經超出了這個向量的長度,比如說
A[7]="D"那么,A這個時候第7個確實是字符D,但是原來的第4-6個呢?實際上它們是缺失值 。也就是NA 。至于缺失值是什么樣的數據類型,這會在之后提到 。
注意:對于名稱,字符串中的""要求會放寬,也就是說,你還可以這么寫 。
B <- c(A=1,B=2,C=3)結果是一樣的
對于我這種懶人來說,這可真是個福音 。
下面我們說說矩陣和數組 。
矩陣可以理解為二維的向量 。但是創建矩陣的參數就一下子多了很多,因此可能會稍有點難理解,我們用兩組例子結束這一切 。
第一組:
S <- c(1,2,3,4,5,6,7,8,9)rnames <- c(1,2,3)cnames <- c("A","B","C")C=matrix(S,nrow=3,ncol=3,byrow=TRUE,dimnames=list(rnames,cnames))C=matrix(S,nrow=3,ncol=3,byrow=FALSE,dimnames=list(rnames,cnames))C=matrix(S,nrow=2,ncol=4,byrow=TRUE,dimnames=list(rnames,cnames)) 顯示的結果如下

文章插圖
我改變的參數在byrow這里,它提示我們應該按行填充還是按列填充 。TRUE自然就是按行存儲的意思 。
Oh,第三個報錯了,看一下報錯信息 。
data length [9] is not a sub-multiple or multiple of the number of rows [2]數據長度9不是行數2的因數或倍數
哇哦,我有一些額外的發現
報錯信息的數字會用[]標識出來,是有意義的 。同時本身也不是特別難懂 。
興奮完之后,回到命令本身,參數解釋如下:
第一個是源向量 。第二個是nrow和ncol參數,row是行,col是列(column),代表需要組合的行數和列數 。第三個是byrow參數,上面已經解釋過了 。第四個是dimnames,用于標記行名稱和列名稱 。我們可以看到,在矩陣里,名稱就非常重要了,它更接近于我們平常做數據分析時所需要使用的表 。
注意:看到那個TRUE了沒,對比一下C里的true和python里的True就知道,R語言也是一個大小寫敏感的語言 。因此要注意代碼的嚴格的大小寫 。
注意:第三,四個參數不是必需的,第三個不寫的話,默認是FALSE,也就是按列填充 。(和TeX的語法差別在于,可選不可選并不能通過直觀的方式看出來,需要靠人的主觀能動性去理解)
注意:在dimnames里有一個list函數,這是為了創建列表,它的目的是把多個變量的集合聚合成為單個變量,這是為了方便給函數的參數提供值,傳參時會經常用 。形式上倒沒有太大的差別 。
下面是第二個例子 。
cbind(A=1:4,B=5:8,C=9:12)rbind(A=1:4,B=5:8,C=9:12)
顯示的結果如下
文章插圖
bind是捆綁的意思,cbind理解為“把列捆綁在一起”,所以提供的向量自然是列向量,那么對應的名稱索引就是行索引 。同樣的,rbind就是“把行捆綁在一起” 。
注意:有的人會問[1,]和[,1]是什么?我們要強調,這種位置上的東西不管是名稱還是數字,都是索引!但是這是矩陣的索引,對于矩陣的索引,我們可以舉幾個例子 。
A=matrix(1:24,nrow=4,ncol=6)A[,6]A[3,]A[3,4]B=A[c(2,3),c(3,4)]Bdimnames(B)=list(c(1,2),c(1,2))B
顯示的結果如下
文章插圖
索引項中,第一個是行索引,第二個是列索引 。同樣,你也可以給索引設置為向量 。
在敲這個代碼的時候,摸索了一個很有趣的用法 。我們注意到,B依然是一個矩陣,但是使用matrix是創建一個矩陣,如果我要修改B這個矩陣的參數怎么辦呢?就可以使用paramater(B)=,其中paramater是在函數中的參數,可以通過這種方法賦值 。
注意:1:4,5:8等等,這個是什么?根據例子可以看出,這會生成1:4的公差為1的等差數列 。你不用去擔心看不懂,我會點出來,然后告訴你,這些有趣的用法在之后的筆記中會講解到 。
接著說數組,R中給的定義是多于2維的向量 。我們拿矩陣去做對比,對數組就很好理解了 。
同樣舉個例子
A <- c('A','B')B <- c(1,2,3)C <- c('!','@','#',')z <- array(1:24,c(2,3,4),dimnames=list(A,B,C))z
顯示的結果如下
文章插圖
我們可以看出,第三維是單獨被拉出來的,第一二維就是行和列 。第三維我們一般稱為頁 。
有了矩陣鋪墊,這個每個參數的含義就好理解多了,但我們還是做一個簡單的解釋 。
第一個paramater是源向量 。第二個是三維中每一維的長度第三個是每一維的名稱注意:我還沒有找到讓數組元素按行填充的辦法 ??赡鼙旧砭蜎]有設置吧 。
注意:在介紹matrix函數的時候,每一個參數都是paramater=...的形式,但是這里似乎不是 。在R里,如果不加這樣的形式,R會按默認的參數順序設置,如果記不住就很容易亂 。使用這樣的形式可以防止這個問題(同樣在python,C里也可以這么做,其中python里叫已知參數)當然不是因為它沒有paramater,這只是寫的人的習慣,因為這三個參數不容易混(性質完全不同),所以用熟的人自然不會再想著加paramater本身 。
好的,問題來了,如果我是小白呢?我想加paramater怎么辦?
乖,讓你的心到最開始的地方看看?
小結再次強調,不要忽略所有注意的地方!我已經寫了很長時間了,但是實際上回到書本,其實只是書本一二兩章的內容的部分 。還有很多有趣的東西還沒有涉及到,因此這只是基本操作總覽的第一部分 。我們會在之后的筆記涉及到剩下的部分 。
下一節我們會說函數,常用函數集合,向量中的因子,排序,數據框,存儲與導入外部數據等其余的基本操作 。
【R語言入門的基本操作 r語言入門操作】感謝支持我的各位!筆芯~~
,
- 稻城亞丁 稻城亞丁簡介
- 設置ie的主頁為空白頁保存30天
- 月季花哪個國家的
- 什么的地板 什么的地板填詞語
- 妖神的蹉跎年華
- 米線的發源地
- 韓商言吃的是什么糖果
- 張馨予騰訊微博
- 素質報告書家長的話怎么寫
- 釋其耒而守株的原因是什么



