R语言怎么写积分_R语言入门的基本操作(1)
大家好,這是從知乎《一個大學生的日常筆記》中遷移過來的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有四個區域。分別的功能是
可以看出,綜合的功能是比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注意:用=賦值是不會被編譯器報錯的,但是由于這個語法不標準,所以有的時候會出問題。
隨著賦值而來的就是數值運算,但是我們不強調那種單變元的數值運算,R有個很強大的功能是向量化操作(當然matlab也有)。(向量理解為一系列變量的按序組合(比如數值向量可以理解為數列)就好)比如說給予五個人身高體重的例子,我們計算一個BMI。
A最后顯示的結果是
確實是一個向量。
注意: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"),'')顯示的結果如下
哎?二和三有什么區別嗎?
如果你在R中運行的話,第二行的命令是默認不換行的,所以就會出現
的情況,不過在Rstudio里,這種情況得到了改善。
注意:cat是連接+輸出的函數,而c只負責連接,在例子中,cat可以消除字符串的""符號。你可以連接任何東西,包括向量。
注意:R的向量要求內部的所有元素數據類型相同。如果通過cat/c連接兩個不同數據類型的向量,系統會進行強制轉換。比如
A結果留給大家自己觀察。(這里原來出了一處錯誤,已經修正,謝謝
@快走姑娘
提醒)
和數值運算類比的就是邏輯運算,但是我不打算在這里先說這些。
伴隨著向量的就是索引,目的自然是為了取用這些元素。索引的方法是[],舉2個例子
A顯示的結果如下
注意:向量內的元素是有序的,這里A[2]索引的就是第二個,不是程序員認為的第三個!
注意:第二個例子中,我們相當于人工設置了索引(在python里,有個專門的數據結構叫字典(dict))為"A","B","C",它們叫這些變量的名稱(name),一一對應1,2,3。和自然索引1,2,3不同的是,這里的人工索引在查看變量的時候會顯示。
注意:索引也可以索引一個向量,也就是索引多個元素(和matlab一樣),比如說,試著運行一下下面這個命令。
A結果留給你們自己去發現。
注意:索引也可以是負索引!它不是python里“倒數第幾個”的含義,它的意思是“索引除標記以外的所有元素”。在數據清洗中非常常見,可以用一個例子去幫助理解
A自己去敲敲代碼看看結果吧
注意:你甚至可以使用索引進行賦值,即使它已經超出了這個向量的長度,比如說
A[7]="D"那么,A這個時候第7個確實是字符D,但是原來的第4-6個呢?實際上它們是缺失值。也就是NA。至于缺失值是什么樣的數據類型,這會在之后提到。
注意:對于名稱,字符串中的""要求會放寬,也就是說,你還可以這么寫。
B結果是一樣的
對于我這種懶人來說,這可真是個福音。
下面我們說說矩陣和數組。
矩陣可以理解為二維的向量。但是創建矩陣的參數就一下子多了很多,因此可能會稍有點難理解,我們用兩組例子結束這一切。
第一組:
S顯示的結果如下
我改變的參數在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顯示的結果如下
我們可以看出,第三維是單獨被拉出來的,第一二維就是行和列。第三維我們一般稱為頁。
有了矩陣鋪墊,這個每個參數的含義就好理解多了,但我們還是做一個簡單的解釋。
注意:我還沒有找到讓數組元素按行填充的辦法。可能本身就沒有設置吧。
注意:在介紹matrix函數的時候,每一個參數都是paramater=...的形式,但是這里似乎不是。在R里,如果不加這樣的形式,R會按默認的參數順序設置,如果記不住就很容易亂。使用這樣的形式可以防止這個問題(同樣在python,C++里也可以這么做,其中python里叫已知參數)當然不是因為它沒有paramater,這只是寫的人的習慣,因為這三個參數不容易混(性質完全不同),所以用熟的人自然不會再想著加paramater本身。
好的,問題來了,如果我是小白呢?我想加paramater怎么辦?
乖,讓你的心到最開始的地方看看?
小結
再次強調,不要忽略所有注意的地方!我已經寫了很長時間了,但是實際上回到書本,其實只是書本一二兩章的內容的部分。還有很多有趣的東西還沒有涉及到,因此這只是基本操作總覽的第一部分。我們會在之后的筆記涉及到剩下的部分。
下一節我們會說函數,常用函數集合,向量中的因子,排序,數據框,存儲與導入外部數據等其余的基本操作。
感謝支持我的各位!筆芯~~
總結
以上是生活随笔為你收集整理的R语言怎么写积分_R语言入门的基本操作(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云上创建Oracle RAC-静默模
- 下一篇: 多人使用服务器,如何开个人账户?以及 个