R语言怎么写积分_R语言入门的基本操作(1)
大家好,這是從知乎《一個(gè)大學(xué)生的日常筆記》中遷移過來的R語言教程的第一篇。
這一份筆記follow了兩本非常優(yōu)秀的R語言教材,分別是Robert I.Kabacoff的《R語言實(shí)戰(zhàn)》和Peter Dalgaard的《R語言統(tǒng)計(jì)入門》,兩本教材的思路有所不同,我會(huì)根據(jù)我自己的思路盡量降低學(xué)習(xí)門檻,綜合來寫教程。(畢竟提高了門檻,我就不知道自己在寫什么了……那就真的沒卵用了……)
閱讀教程的時(shí)候我有自己的思路,看過我的LaTeX入門筆記的同學(xué)們會(huì)明白,如果我想到了一些可能會(huì)讓入門新手迷糊的地方,我會(huì)以注意:這樣的形式去標(biāo)記出來,而且有的時(shí)候,可能這些小插曲更加重要,請(qǐng)不要忽略它們。
例子大部分都是摘抄的,但是我會(huì)做一些解釋和細(xì)節(jié)上的調(diào)整,同時(shí)考慮到代碼規(guī)范的問題,我很多例子不會(huì)提供符號(hào)可選的余地,比如"和',用于標(biāo)記字符都可以,但是代碼規(guī)范推薦使用"
目前我已經(jīng)是準(zhǔn)大二學(xué)生,統(tǒng)計(jì)的先修課只有一門學(xué)校上的《概率論與數(shù)理統(tǒng)計(jì)》,事實(shí)上,這門課學(xué)完之后,R的大部分內(nèi)容就已經(jīng)可以上手操作了。因此我們不會(huì)在這門課程已有的理論部分下功夫去解釋。但是,礙于我自己本科生的視野,我們不會(huì)把太復(fù)雜,或者根本不可能涉及到的的內(nèi)容搬到這里,因此這對(duì)于真正的statistician,或者是統(tǒng)計(jì)學(xué)專業(yè)的大牛來說,可能最多只是一份入門筆記而已。
不過也還是有些亮點(diǎn)的,我可能會(huì)在教程里夾雜點(diǎn)別的語言的新奇玩意做些互相的對(duì)比2333
引言到此為止,下面我們開始正題。
目錄
- R語言環(huán)境初探
- 一些基本的素養(yǎng)和操作
- 賦值
- 向量
- 索引
- 矩陣
- 數(shù)組
- 小結(jié)
R語言環(huán)境初探
細(xì)心的同學(xué)可能已經(jīng)看到了封面的那個(gè)圖,那個(gè)就是我們推薦下載的R語言編輯器——Rstudio,但是這僅僅是個(gè)編輯器,必須下載安裝真正的R語言編譯器才能夠運(yùn)行。至于如何下載——百度搜索R和Rstudio關(guān)鍵字就好。那兩個(gè)玩意的圖標(biāo)大概長(zhǎng)這樣
我們主要使用的編輯器是Rstudio,但是為了教程的完整性(integrity),這里展示一張R語言的打開界面
輸入一行命令試試?
plot(rnorm(1000))(居然沒提供R語言的選項(xiàng)……)
系統(tǒng)會(huì)為你畫一張圖
這是一張含有1000個(gè)按正態(tài)分布排列的隨機(jī)數(shù)的圖。
R的環(huán)境到此結(jié)束,下面我們回到Rstudio來看看
我們可以看到Rstduio有四個(gè)區(qū)域。分別的功能是
可以看出,綜合的功能是比R要強(qiáng)大很多的,而且根據(jù)我們網(wǎng)站組的大佬的反應(yīng),這玩意其實(shí)是一個(gè)html……也就是說你會(huì)JS你就可以惡搞它的界面啦
對(duì)了,在你關(guān)掉R/Rstudio的時(shí)候,系統(tǒng)會(huì)問你是否要保存空間映像,那個(gè)其實(shí)就是保存歷史記錄,方便以后繼續(xù)使用而設(shè)置的。
一些基本的素養(yǎng)和操作
R語言是一個(gè)統(tǒng)計(jì)語言。統(tǒng)計(jì)數(shù)據(jù)離不開一個(gè)良好的用于儲(chǔ)存的結(jié)構(gòu)和標(biāo)識(shí)。我們會(huì)先從它的基本操作講起,在其中夾雜著數(shù)據(jù)類型,數(shù)據(jù)框等大量的結(jié)構(gòu)和細(xì)節(jié)。
首先說說幫助文檔
R語言和C++/python不一樣,R語言非常瑣碎,因此seek for help是必要的,但是R的official document很難懂,因此不推薦拿那個(gè)去當(dāng)作你學(xué)習(xí)的教程。我們推薦的是以下三種尋求幫助的命令
help("function") or ?functionhelp.search("function") or ??functionexample("function")第一個(gè)是查函數(shù)的幫助文檔,第二個(gè)是以某一個(gè)function為關(guān)鍵字搜索幫助文檔。第三個(gè)會(huì)給出某一個(gè)函數(shù)的使用示例。在對(duì)函數(shù)不熟悉的時(shí)候一定要學(xué)會(huì)使用它。
不管是什么樣的計(jì)算機(jī)語言,賦值都是最基礎(chǔ)的工作。但是賦值符號(hào)不是C++里的=,而是比如
r注意:用=賦值是不會(huì)被編譯器報(bào)錯(cuò)的,但是由于這個(gè)語法不標(biāo)準(zhǔn),所以有的時(shí)候會(huì)出問題。
隨著賦值而來的就是數(shù)值運(yùn)算,但是我們不強(qiáng)調(diào)那種單變?cè)臄?shù)值運(yùn)算,R有個(gè)很強(qiáng)大的功能是向量化操作(當(dāng)然matlab也有)。(向量理解為一系列變量的按序組合(比如數(shù)值向量可以理解為數(shù)列)就好)比如說給予五個(gè)人身高體重的例子,我們計(jì)算一個(gè)BMI。
A最后顯示的結(jié)果是
確實(shí)是一個(gè)向量。
注意:R語言構(gòu)造向量的方法是c(...)
注意:如果不輸入某一個(gè)變量的名稱,R默認(rèn)是不顯示結(jié)果的,因此我最后一行又加了一個(gè)BMI變量名顯示它。
注意:我們推薦寫多行R代碼的時(shí)候使用腳本,之后在Rstudio中,腳本區(qū)域的右上角有三個(gè)按鈕,第一個(gè)run是逐行運(yùn)行代碼,第三個(gè)source是運(yùn)行全部代碼(但是要在下拉框選擇source with echo,否則依然顯示不了結(jié)果),大家注意回去找找看。
注意:如果你真的點(diǎn)擊了source去運(yùn)行代碼的話,可以在command區(qū)域看到這樣的命令
source('C:/Users/Asus/Desktop/A.R')拿出來說的原因是想強(qiáng)調(diào):如果你要輸入一個(gè)文件路徑,一定要輸入正斜杠/,因?yàn)榉葱备苁?strong>轉(zhuǎn)義字符(escaped character),在""中間輸入字符,如果想讓它打印出",就可以輸入"。
我們回到向量這個(gè)問題上來
常用的R的數(shù)據(jù)類型有三種:數(shù)字,字符,邏輯真假(當(dāng)然還有個(gè)缺失值類型,我們?cè)谥髸?huì)說)。因此我們也可以創(chuàng)建字符和邏輯向量。
關(guān)于字符向量,我們列舉下面三個(gè)例子
c("A","B","C")cat(c("A","B","C"))cat(c("A","B","C"),'')顯示的結(jié)果如下
哎?二和三有什么區(qū)別嗎?
如果你在R中運(yùn)行的話,第二行的命令是默認(rèn)不換行的,所以就會(huì)出現(xiàn)
的情況,不過在Rstudio里,這種情況得到了改善。
注意:cat是連接+輸出的函數(shù),而c只負(fù)責(zé)連接,在例子中,cat可以消除字符串的""符號(hào)。你可以連接任何東西,包括向量。
注意:R的向量要求內(nèi)部的所有元素?cái)?shù)據(jù)類型相同。如果通過cat/c連接兩個(gè)不同數(shù)據(jù)類型的向量,系統(tǒng)會(huì)進(jìn)行強(qiáng)制轉(zhuǎn)換。比如
A結(jié)果留給大家自己觀察。(這里原來出了一處錯(cuò)誤,已經(jīng)修正,謝謝
@快走姑娘
提醒)
和數(shù)值運(yùn)算類比的就是邏輯運(yùn)算,但是我不打算在這里先說這些。
伴隨著向量的就是索引,目的自然是為了取用這些元素。索引的方法是[],舉2個(gè)例子
A顯示的結(jié)果如下
注意:向量?jī)?nèi)的元素是有序的,這里A[2]索引的就是第二個(gè),不是程序員認(rèn)為的第三個(gè)!
注意:第二個(gè)例子中,我們相當(dāng)于人工設(shè)置了索引(在python里,有個(gè)專門的數(shù)據(jù)結(jié)構(gòu)叫字典(dict))為"A","B","C",它們叫這些變量的名稱(name),一一對(duì)應(yīng)1,2,3。和自然索引1,2,3不同的是,這里的人工索引在查看變量的時(shí)候會(huì)顯示。
注意:索引也可以索引一個(gè)向量,也就是索引多個(gè)元素(和matlab一樣),比如說,試著運(yùn)行一下下面這個(gè)命令。
A結(jié)果留給你們自己去發(fā)現(xiàn)。
注意:索引也可以是負(fù)索引!它不是python里“倒數(shù)第幾個(gè)”的含義,它的意思是“索引除標(biāo)記以外的所有元素”。在數(shù)據(jù)清洗中非常常見,可以用一個(gè)例子去幫助理解
A自己去敲敲代碼看看結(jié)果吧
注意:你甚至可以使用索引進(jìn)行賦值,即使它已經(jīng)超出了這個(gè)向量的長(zhǎng)度,比如說
A[7]="D"那么,A這個(gè)時(shí)候第7個(gè)確實(shí)是字符D,但是原來的第4-6個(gè)呢?實(shí)際上它們是缺失值。也就是NA。至于缺失值是什么樣的數(shù)據(jù)類型,這會(huì)在之后提到。
注意:對(duì)于名稱,字符串中的""要求會(huì)放寬,也就是說,你還可以這么寫。
B結(jié)果是一樣的
對(duì)于我這種懶人來說,這可真是個(gè)福音。
下面我們說說矩陣和數(shù)組。
矩陣可以理解為二維的向量。但是創(chuàng)建矩陣的參數(shù)就一下子多了很多,因此可能會(huì)稍有點(diǎn)難理解,我們用兩組例子結(jié)束這一切。
第一組:
S顯示的結(jié)果如下
我改變的參數(shù)在byrow這里,它提示我們應(yīng)該按行填充還是按列填充。TRUE自然就是按行存儲(chǔ)的意思。
Oh,第三個(gè)報(bào)錯(cuò)了,看一下報(bào)錯(cuò)信息。
data length [9] is not a sub-multiple or multiple of the number of rows [2]數(shù)據(jù)長(zhǎng)度9不是行數(shù)2的因數(shù)或倍數(shù)
哇哦,我有一些額外的發(fā)現(xiàn)
報(bào)錯(cuò)信息的數(shù)字會(huì)用[]標(biāo)識(shí)出來,是有意義的。同時(shí)本身也不是特別難懂。
興奮完之后,回到命令本身,參數(shù)解釋如下:
- 第一個(gè)是源向量。
- 第二個(gè)是nrow和ncol參數(shù),row是行,col是列(column),代表需要組合的行數(shù)和列數(shù)。
- 第三個(gè)是byrow參數(shù),上面已經(jīng)解釋過了。
- 第四個(gè)是dimnames,用于標(biāo)記行名稱和列名稱。
我們可以看到,在矩陣?yán)?#xff0c;名稱就非常重要了,它更接近于我們平常做數(shù)據(jù)分析時(shí)所需要使用的表。
注意:看到那個(gè)TRUE了沒,對(duì)比一下C里的true和python里的True就知道,R語言也是一個(gè)大小寫敏感的語言。因此要注意代碼的嚴(yán)格的大小寫。
注意:第三,四個(gè)參數(shù)不是必需的,第三個(gè)不寫的話,默認(rèn)是FALSE,也就是按列填充。(和TeX的語法差別在于,可選不可選并不能通過直觀的方式看出來,需要靠人的主觀能動(dòng)性去理解)
注意:在dimnames里有一個(gè)list函數(shù),這是為了創(chuàng)建列表,它的目的是把多個(gè)變量的集合聚合成為單個(gè)變量,這是為了方便給函數(shù)的參數(shù)提供值,傳參時(shí)會(huì)經(jīng)常用。形式上倒沒有太大的差別。
下面是第二個(gè)例子。
cbind(A=1:4,B=5:8,C=9:12)rbind(A=1:4,B=5:8,C=9:12)顯示的結(jié)果如下
bind是捆綁的意思,cbind理解為“把列捆綁在一起”,所以提供的向量自然是列向量,那么對(duì)應(yīng)的名稱索引就是行索引。同樣的,rbind就是“把行捆綁在一起”。
注意:有的人會(huì)問[1,]和[,1]是什么?我們要強(qiáng)調(diào),這種位置上的東西不管是名稱還是數(shù)字,都是索引!但是這是矩陣的索引,對(duì)于矩陣的索引,我們可以舉幾個(gè)例子。
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顯示的結(jié)果如下
索引項(xiàng)中,第一個(gè)是行索引,第二個(gè)是列索引。同樣,你也可以給索引設(shè)置為向量。
在敲這個(gè)代碼的時(shí)候,摸索了一個(gè)很有趣的用法。我們注意到,B依然是一個(gè)矩陣,但是使用matrix是創(chuàng)建一個(gè)矩陣,如果我要修改B這個(gè)矩陣的參數(shù)怎么辦呢?就可以使用paramater(B)=,其中paramater是在函數(shù)中的參數(shù),可以通過這種方法賦值。
注意:1:4,5:8等等,這個(gè)是什么?根據(jù)例子可以看出,這會(huì)生成1:4的公差為1的等差數(shù)列。你不用去擔(dān)心看不懂,我會(huì)點(diǎn)出來,然后告訴你,這些有趣的用法在之后的筆記中會(huì)講解到。
接著說數(shù)組,R中給的定義是多于2維的向量。我們拿矩陣去做對(duì)比,對(duì)數(shù)組就很好理解了。
同樣舉個(gè)例子
A顯示的結(jié)果如下
我們可以看出,第三維是單獨(dú)被拉出來的,第一二維就是行和列。第三維我們一般稱為頁。
有了矩陣鋪墊,這個(gè)每個(gè)參數(shù)的含義就好理解多了,但我們還是做一個(gè)簡(jiǎn)單的解釋。
注意:我還沒有找到讓數(shù)組元素按行填充的辦法。可能本身就沒有設(shè)置吧。
注意:在介紹matrix函數(shù)的時(shí)候,每一個(gè)參數(shù)都是paramater=...的形式,但是這里似乎不是。在R里,如果不加這樣的形式,R會(huì)按默認(rèn)的參數(shù)順序設(shè)置,如果記不住就很容易亂。使用這樣的形式可以防止這個(gè)問題(同樣在python,C++里也可以這么做,其中python里叫已知參數(shù))當(dāng)然不是因?yàn)樗鼪]有paramater,這只是寫的人的習(xí)慣,因?yàn)檫@三個(gè)參數(shù)不容易混(性質(zhì)完全不同),所以用熟的人自然不會(huì)再想著加paramater本身。
好的,問題來了,如果我是小白呢?我想加paramater怎么辦?
乖,讓你的心到最開始的地方看看?
小結(jié)
再次強(qiáng)調(diào),不要忽略所有注意的地方!我已經(jīng)寫了很長(zhǎng)時(shí)間了,但是實(shí)際上回到書本,其實(shí)只是書本一二兩章的內(nèi)容的部分。還有很多有趣的東西還沒有涉及到,因此這只是基本操作總覽的第一部分。我們會(huì)在之后的筆記涉及到剩下的部分。
下一節(jié)我們會(huì)說函數(shù),常用函數(shù)集合,向量中的因子,排序,數(shù)據(jù)框,存儲(chǔ)與導(dǎo)入外部數(shù)據(jù)等其余的基本操作。
感謝支持我的各位!筆芯~~
總結(jié)
以上是生活随笔為你收集整理的R语言怎么写积分_R语言入门的基本操作(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云上创建Oracle RAC-静默模
- 下一篇: 多人使用服务器,如何开个人账户?以及 个