R語言快速入門

新博文地址:http://blog.how-to-code.info/r/how-to-begin-my-R-language.htmlhtml

@Conda 我要如何開始R語言?
更多R語言教程/精彩文章請訪問  http://r.how-to-code.info
不少時候,咱們的老闆跟咱們說,這個東西你用R語言去算吧,Oh,My god!什麼是R語言?我要怎麼開始呢?
 
其實回答這個問題很簡單,首先,你只須要知道R語言其實就是一種計算機語言,它很強大,它是專門用來進行計算的,它比C\C++、Perl都要強大,雖然他沒有C那麼的萬能,沒有Perl那麼的文本處理能力,可是在計算和數據處理上,它絕對是一頂一的,並且當初它被提出來的初衷之一就是要讓非計算機專業的人也能用計算機語言完成工做,極大程度上下降了咱們非計算機專業對於計算機語言掌握的難度。
 
好了,廢話很少說,咱們立刻開始如何使用R。
 
首先,咱們要下載一個軟件,這個軟件就叫R。由於大多數人的計算機系統爲Windows,實際上若是你的系統是Linux的話,想必咱們也不必來看這邊文章了。
你能夠來這個網站下載R程序,http://www.r-project.org/。固然,若是你必定是找不到這個網站中R語言的程序位置,那麼請看這裏:http://ftp.ctex.org/mirrors/CRAN/,在這裏,請點擊install R for the first time,這樣你就能夠把這個軟件下載下來了。接下來就跟咱們平時使用軟件同樣,安裝,安裝時請注意一點: 安裝路徑不要有中文字符,以免一些沒必要要的麻煩。
 
接下來,我推薦你們一個額外的步驟,事實上你進行了上述步驟就能夠真正開始你的R語言的使用了,可是我推薦你們再安裝另一個軟件,叫作Rstudio。下載地址爲:http://www.rstudio.com/ide/download/
若是Rstudio提示你不能找到R的位置,你能夠自行尋找,這裏再也不贅述。
 
以上都弄好後,咱們能夠直接打開Rstudio。這樣咱們就能夠真正使用R了。 R語言 <wbr>我要如何開始R語言
你們能夠看上圖:
1:文本編輯區,你能夠在這裏寫一些代碼,可是目前而言,咱們還不須要使用,之後會提到的。
2:workspace和歷史記錄,在workspace,你能夠查看你的變量和數據;歷史記錄裏面你能夠查看你過去所使用過的全部記錄。
3:分別是文件、做圖顯示區、包信息和幫助區。
4:是咱們真正的R語言操做區,咱們能夠在這裏輸入咱們想要的代碼,獲得咱們的結果,接下來咱們來兩個簡單的例子:
第一個例子:大部分程序的第一句代碼都是「hello,world」,做爲一種程序語言,咱們也來試一下:
print("Hello, World!")
[1] "Hello, World!"
上述紅色的前面帶了>符號的是須要輸入到4裏面去的。>符號不須要輸入。 每句話後須要回車。
第二個例子:咱們產生1到10,一共十個數,而後每一個數都加1。
x=1:10
x=x+1
x
 [1]  2  3  4  5  6  7  8  9 10 11
x=1:10表示產生 1  2  3  4  5  6  7  8  9 10這些數字,而後x=x+1表示每一個數都加1,最後輸入x後表示顯示x這個變量。
 
 
應廣場君之邀,簡單介紹下R語言的基本操做(是真的很簡單的介紹~)。具體內容包括:
1.基本介紹(關於R語言的一些常識)
2.數據操做(包括數據的屬性、賦值、引用,和簡單的數據處理以及外來數據的讀取和寫入)
3.控制流 (即循環)
注:能力有限,只針對新手做快速入門的簡單介紹,使其迅速使用R作簡單模擬,因此不會涉及一些不經常使用的操做(至少我歷來沒用過和不多用的)。
 
1、基本介紹:
1. 警告:在輸入命令前請切換到英文模式。不然你的一大段代碼可能由於一箇中文狀態的括號而報錯,R語言的報錯並不智能沒法指出錯誤的具體位置。最可怕的是不報錯但就是沒法輸出正確結果。
2. 警告:R語言區別大小寫,因此對象A與對象a並不同,在調用函數、R包時也要注意大小寫。
3. R軟件由R包組成,每一個包裏有各類函數。命令「library()」【注意輸入命令時不包含雙引號,下同】查看原裝的幾十個R包列表。對於非原裝的R包,能夠經過命令「install.packages('RCurl')」【其餘包把名字把RCurl替換就是了,注意不要忘了括號裏的引號】,選擇任意鏡像安裝RCurl包。之後在調用此包的函數以前應先輸入命令「library(RCurl)」【原裝包的中函數不須要此命令】
4. 打開R軟件,光標左側的「>」符號表示等待輸入,「+」表示承接上一行的代碼。若是一句代碼很長,可敲擊回車繼續輸入。而當你輸入完畢回車無輸出結果並顯示「+」時,極可能是你少輸入了一個括號
5. R語言中「<-」表示賦值,如「x <- 3」表示賦予對象x的值爲3。請不要用等號!
6. R代碼中「#」後邊的都表示註釋,不會被執行此時可輸入中文。在代碼中R語言支持中文但並很差,建議全英環境。
7. R的編輯器。在R環境下編碼時不要碰到「上」和「下」兩個方向鍵。「上」會自動複製上一行的代碼,「下」鍵會清除改行代碼。另外:換行後,已經輸入的代碼不可更改,只有再從新輸入更改賦值。
8. R語言強大的幫助功能:輸入命令「?all」或者「help(all)」查看函數all的用法,其餘函數自行替換名稱。有時候不能獲得查詢結果,會自動提示使用「??」或者「help.search(‘’)」查詢。還得不到結果的話請檢查是否輸入有誤。
9. 關閉R軟件,使用命令「q()」或者直接點擊右上角的關閉。此時會提示「是否保存工做空間影像」,若是保存下次打開時會自動加載映像,上次操做中的已賦值的對象、數據可繼續使用

好了,知道這些已經足夠接下來的了,想了解更多的話就讀讀這些資料:
http://pan.baidu.com/share/link?shareid=22919&uk=622761108
「153分鐘…」介紹了常見的153個問題,想系統瞭解能夠讀讀「導論」,不一一介紹了,本身看吧,都是經典教材,若是有心能讀的下去基本就不用看這篇貼了~
 
2、數據操做
1.對象內在屬性
在R中,全部對象的數據都有兩個屬性:mode 和 length 即類型【包含數值型(numeric)、字符型(character)、複數性(complex)、邏輯型(logical)】和長度【包含元素個數】,可分別用函數「mode()」、「length()」獲得。同時能夠用「x <- numric(2)」定義x爲一個長度爲2的數值型數據,其餘數據類型也一樣,「logical(2)」表示長度爲2的邏輯型數據。長度爲2表示其x包含了兩個數據值,用線代語言說就是x是一個2維行向量。

2.數據形式
在線性代數裏有向量、矩陣和行列式等數據形式,R語言也有不一樣的數據形式以應對各類數據處理。包括:向量、數組、矩陣、列表、數據框和時間序列。
2.1 向量
向量是由一組一樣類型(mode)的數據構成。數值向量、字符向量和邏輯向量。在統計學中數據有分類數據、順序數據、數值數據之分,有時候看似數字但實際表示一個組別,好比在SPSS中輸入數據定義0爲男,1爲女。由此在R中又有一種因子向量,表示類別。下面一一介紹四種向量。向量的通用賦值函數「c()」,用窮舉法列出向量全部的元素。
【數值型向量賦值】:
列舉法:
「x <- c(1,2,3,4,5) 」表示5維行向量,分別等於1到5,也能夠寫成「 x<- c(1:5)」【此用法只適用於數值型數據,且等差爲1。那「c(1.4:5)」生成的數據是怎樣的?just try~】
在函數「c()」中列舉時也能夠包含已經賦值的向量,好比上個命令咱們已經對x賦值,那麼「y <- c(x,x,x)」表示什麼?試試看,我想你能很輕易的發現規律。

重複法:
對於命令「y <-c (x,x,x)」 還有更簡單的寫法,「y <- rep(x,times=3)」【固然參數x是單個元素也能夠,好比「rep(1,times3)」,並且此函數在也實用於其餘數據類型哦~】
函數「rep(x,time= ,each= ,length.out=)」中的「times」參數表示x的重複次數,參數「each」表示每一個元素重複的次數,試試
y <- rep(x,times=3,each=2)
參數「length.out」表示截取前多少個元素,試試y<-rep(x,times=3,each=2,length.out=2)
【by the way:是否是覺着參數多的時候輸入很麻煩?】
這裏順便介紹下函數參數的寫法。首先聲明在函數內部對參數賦值習慣用等號【雖然「<-」也能夠吧】「rep(x,times=3,each=2,length.out=2)」也能夠簡單的寫「rep(x,3,3,2)」,不用輸入參數名稱直接按順序輸入其值就能夠了。那如何查看參數的順序?前邊是否是提到過R語言強大的幫助系統?輸入命令「?rep」敲回車看看。

等差數列賦值函數:
函數「c(1:3)」的等差爲1【實際上是符號「:」的等差爲1,可將其稱爲等差符】,那等差爲0.5或者2怎麼辦?用更通常的函數「seq(from=,to=,by=,length.out=)」從「from」爲第一個元素開始,最大的元素不大於「to」。
參數「by」表示等差,參數「length.out」表示等差數列元素的個數,兩個參數任給一個。在參數「length.out」給定參數「by」自動按「by = ((to - from)/(length.out - 1))」計算。
不明白? 那就試試「seq(1,5,1)」跟「seq(1,5,length.out=5)」
【數值型向量運算】:向量的運算規則:
向量的運算實質是多個向量中對應的每一個元素的運算,即向量a的第n個元素與向量b的第n個元素運算。如:
1:5 * 1:5
[1] 1 4 9 16 25 #最前邊的「[1]」不用管它
若是你足夠敏銳,應該會問兩個長度不等的向量運算怎麼辦?答案是短向量會拉長到與另外一向量的長度相等。拉伸的規則同「rep()」函數。如:
1:2 * 1:6
[1] 1 4 3 8 5 12
這裏就至關與:
rep(1:2,times=3)* 1:6
注意到向量 1:6 恰好是 1:2 的倍數。若是不成倍的話,短向量重複次數不成倍,會獲得一個警告信息。如:
1:5 * 1:6
[1] 1 4 9 16 25 6
警告信息:In 1:5 * 1:6 : 長的對象長度不是短的對象長度的整倍數
這裏短向量 1:5 在運算時只增長了一個元素1.至關於:
rep(1:5,times=2,length.out=6) * 1:6 #這個結果是同樣的,但不會獲得警告信息

向量的運算函數:
運算符: +、-、*、/、^ 不解釋。 %% 表示求餘數、%/% 表示整除,即留整。四捨五入咋個辦?我也不知道,你知道這個運算符或者函數告訴我哈~
數學函數: exp()、sqrt()、sin()、cos()、tan()、cot() 【自行回想其餘三角函數】
統計函數: min()、max()、range()、mean()、sum()、median()、var()、sd()、sort()
不一一介紹,哪一個不懂花十秒百度一下找不着再提問。
【數值型向量索引】:
索引,引用,隨便你怎麼稱呼,其實就是借來別的對象的數據用。在此慎重提醒一下,既然是借別的對象來用,那這個對象就應該是已經存在的,或者已經人爲定義過的。
假設咱們已經定義「x <- 1:5」,那下次你再須要一個 1:5 這樣一個向量時直接用x來代替就是索引。但不少時候咱們是隻須要某個對象中的部分信息,好比你只想在成績單裏找到本身的成績。
來到重點:
索引分爲位置索引和邏輯索引【這對全部的索引都是成立的,與對象無關,管它是數值型仍是字符型,管它向量仍是列表】
全部的索引都是裝在一箇中括號裏的,「[]」.【注意是英文狀態下的中括號】

位置索引就是找到某個位置的數據,好比你知道你的排名是第一,那就當作績單裏的第一個成績吧。
x <- 1:4 
x[2] #就表示對象x的第二個元素,很簡單吧。

邏輯索引就是在「[]」寫一個表達式,找到符合表達式的元素。如: x[x>2] 就是找到x中大於2的元素.
介紹幾個經常使用邏輯符號: <、>、>=、<=、==【表示兩個對象恆相等】 != 不等
【數值型向量處理】
直接舉例說明。首先定義: 「x <- 1:5」 一個五維行向量

1.判斷是否爲數值型向量 
is.numeric(x) 
其餘向量轉換爲數值型向量: as.numeric()
一樣判斷是否爲字符、邏輯的函數: is.character()、is.logical()
轉化爲字符、邏輯的函數: as.character()、as.logical()

2.增長一個元素爲6. 
x[6] <- 6若是直接寫「 x[8] <- 6 」那麼x的第六和第七個元素自動賦值爲「NA」,表示缺失值。

3.接上,刪除向量中的缺失值。
x[is.na(x)=F]
函數 is.na() 判斷是否爲缺失值。 「x[is.na(x)=F]」表示索引出x中不是缺失值的元素。「length(x[is.na(x)])」返回x中缺失值的個數。

4.刪除最後一個元素 
x <- x[1:(length(x)-1)]
很簡單,不解釋了,應該能夠看懂的

5.更改某個元素,如第三個元素改成8
x[3] <- 8

一個小考題:
首先輸入命令 「x<- rnorm(100) #產生100個標準正態分佈隨機數」,找出x中絕對值小於1.96的值,並計算個數。
【字符串向量】

【賦值】: 字符串賦值時把內容都寫在 "" 裏,同其餘軟件是一致的,事實上''單引號也能夠,二者有何區別我也不太清楚。再次強調下:引號都是英文狀態下的函數「c()」「rep()」仍然適用。另介紹函數「paste()」。一部電視劇有數十集,文件名通常爲:「水滸傳1」「水滸傳2」...「水滸傳n」...下面就用 paste() 函數來創建一個字符向量:paste("水滸傳",1:30) # 30集水滸傳的文件名
其運算規則就是把逗號隔開的兩個向量按順序組合了一下,跟數值型向量的向量計算規則是同樣的。固然也能夠多個向量組合:paste("水滸傳",1:30,"集")
注意到兩個細節:
1.函數內部有字符有數字,是的,這傢伙能把全部類型的東西所有按字符串組合起來。
2.在輸出結果中【"水滸傳 1"】發現兩個元素之間有個空格,如何取消? 
paste() 函數裏有一個參數「sep=" "」,表示將不一樣對象組合時默認用空格隔開,修改這個參數就ok了。 
paste("水滸傳",1:30,sep="") 
固然「sep」這個參數能夠定義成任意一個字符串,發揮你的想象吧~~~
鑑於格式太亂懶得再調,我試試發圖片~
相關文章
相關標籤/搜索