R語言入門

最近在復習python的科學計算蛮穿,突然心血來潮余境,想看看R的數(shù)據(jù)處理和python的區(qū)別在哪驻呐,所以就有了這篇文章。

R語言簡介

四十多年前葛超, R 語言的始祖誕生了 暴氏, John Chambers 在貝爾實驗室中開發(fā)出S語言 ,用于快速地進行數(shù)據(jù)探索绣张, 統(tǒng)計分析和可視化 答渔。十幾年后 , 新西蘭奧克蘭大學的 Robert Gentleman 和 Ross Ihaka 在 S 語言的基礎上發(fā)明了 R 語言 。

R 語言流淌著統(tǒng)計學的血液 侥涵, 它內置了海量的統(tǒng)計函數(shù) 沼撕,使用者可以利用其對數(shù)據(jù)進行快速交互分析 。 同時作為一門圖靈完備的解釋性語言 芜飘, R 的使用者比 SAS , SPSS 等統(tǒng)計軟件的使用者擁有了更大程度的自由务豺。

進入 21 世紀后 ,由于個人計算機的普及和統(tǒng)計學科的發(fā)展 嗦明, R 社群得以進一步發(fā)展 笼沥, 一些富有想象力的優(yōu)秀工具涌現(xiàn)出來 。 如果把 R 語言比作一輛車的話 娶牌, Rstudio 的出現(xiàn)使得我們有了信息更加豐富的儀表盤 奔浅, dplyr , data.table 等等數(shù)據(jù)處理的包加強了引擎 , ggplot , shiny 等等可視化的工具使得車的外型更好看诗良。

與大多用于工程實踐的編程語言相比 汹桦, R 語言更像是一個靈巧的研究工具 ,在處理大量數(shù)據(jù) 鉴裹, 性能方面比較薄弱舞骆。但是與其他工具交互就能漂亮地解決問題 钥弯, 例如與 Spark 配合 (sparkR) 解決數(shù)據(jù)量較大的情況 , 與 C++(Rcpp) 配合可以解決性能不足的問題督禽。

早在五十多年前 脆霎, John Tukey 就在論文 "The Future of Data Analysis"[1] 中發(fā)表了這樣的看法:統(tǒng)計學不應該只是關于統(tǒng)計推斷的數(shù)學理論,而應該和現(xiàn)實世界聯(lián)系起來赂蠢,成為一種“科學”绪穆。為了實現(xiàn)這樣的目標,需要有收集和整理數(shù)據(jù)虱岂、分析和解釋數(shù)據(jù)的技術玖院,并且把實踐當成檢驗理論的標準。

R語言及其生態(tài)作為連接現(xiàn)實世界中的數(shù)據(jù)和數(shù)學模型的橋梁第岖,正在社群的努力下一步一步地把這些想法具體化难菌。

讓我們進入 R 語言的世界!

R語言的安裝

ubuntu下安裝

1蔑滓、直接到官網(wǎng)上下載安裝包(tar.gz)郊酒,然后依次安裝即可。
2键袱、在網(wǎng)速可以的情況下燎窘,利用在apt-get安裝是一種更為方便的方式:

sudo apt-get update
sudo apt-get install r-base
sudo apt-get install r-base-dev

MAC下安裝

mac安裝更簡單
下載R安裝包,完成后點安裝蹄咖。

R語言基本數(shù)據(jù)結構

下面用 R 的解釋器來熟悉一下 R 語言的基本數(shù)據(jù)結構褐健。

首先讓我們先進入 R 環(huán)境下
我是在mac操作環(huán)境下的,ubuntu的是一樣的澜汤。

 youdi@liangchangyoudeMacBook-Pro  ~  R

R version 3.4.1 (2017-06-30) -- "Single Candle"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin15.6.0 (64-bit)

R是自由軟件蚜迅,不帶任何擔保。
在某些條件下你可以將其自由散布俊抵。
用'license()'或'licence()'來看散布的詳細條件谁不。

R是個合作計劃,有許多人為之做出了貢獻.
用'contributors()'來看合作者的詳細情況
用'citation()'會告訴你如何在出版物中正確地引用R或R程序包徽诲。

用'demo()'來看一些示范程序刹帕,用'help()'來閱讀在線幫助文件,或
用'help.start()'通過HTML瀏覽器來看幫助文件谎替。
用'q()'退出R.
>
>

向量

向量是 R 語言中最基本的數(shù)據(jù)類型轩拨,在 R 中沒有單獨的標量(例如 1 本質上是 c(1)) 瓮具。

賦值

R 中可以用 = 或者 <- 來進行賦值 嚼锄, <-的快捷鍵是 alt + - 既鞠。

> a <- c(4,5,6)
> a
[1] 4 5 6
篩選

我們可以用下標來篩選,例如

> a[1:2]
[1] 4 5
> a[3]
[1] 6

注意 R 語言的下標是從 1 開始的喷舀。

當然我們也可以用邏輯進行篩選砍濒,例如

> a[a>4]
[1] 5 6
> a[a>5]
[1] 6

為了了解這個式子的原理,我們先看看 a>4 是什么

> a>4
[1] FALSE  TRUE  TRUE

我們可以看到這是一個布爾值構成的向量硫麻,我們在用這個布爾值
做下標時只會選出答案為 TRUE 的值爸邢。
另外,負數(shù)下標表示不選這個這些下標拿愧,例如:

> a[-1]
[1] 5 6
> a[-2]
[1] 4 6
> a[-3]
[1] 4 5
> a[-4]
[1] 4 5 6
合并向量

c() 可以合并向量杠河,例如

> c(a[1] , 3 , a[2:3] , 1)
[1] 4 3 5 6 1
循環(huán)補齊

向量有個比較有趣的性質,當兩個向量進行操作時浇辜,如果長度不等券敌,
長度比較短的一個會復制自己直到自己和長的一樣長。

> b
[1] 1 2 3 4 5 6 7 8
> a
[1] 4 5 6
> a + b
[1]  5  7  9  8 10 12 11 13
Warning message:
In a + b : 長的對象長度不是短的對象長度的整倍數(shù)
> b <- c(1,2,3,4,5,6,7,8,9)
> a + b
[1]  5  7  9  8 10 12 11 13 15
> length(b)
[1] 9
> which.max(b)
[1] 9
> which.min(b)
[1] 1

不懂就使用help()查看命令手冊

矩陣

矩陣柳洋,從本質上來說就是多維的向量待诅,我們來看一看

我們如何新建一個矩陣。

> a <- matrix(c(1,2,3,4,5,6,7,8,9), nrow=3)
> a
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

matrix有很多參數(shù)

help(matrix)

Usage:

     matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
            dimnames = NULL)

     as.matrix(x, ...)
     ## S3 method for class 'data.frame'
     as.matrix(x, rownames.force = NA, ...)

     is.matrix(x)

篩選矩陣

與向量相似熊镣,我們可以用下標來篩選矩陣卑雁,

例如:

> a[1, 2:3]
[1] 4 7

可以看到結果退化成了一個向量

線性代數(shù)

當我們對兩個矩陣相乘,我們得到的結果是

對應元素兩兩相乘的結果绪囱,例如

> a
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> a * a
     [,1] [,2] [,3]
[1,]    1   16   49
[2,]    4   25   64
[3,]    9   36   81

而這不是我們想要的矩陣乘法测蹲,在 R 中我們在乘法旁邊加兩個

百分號來做矩陣乘法:

> a%*%a
     [,1] [,2] [,3]
[1,]   30   66  102
[2,]   36   81  126
[3,]   42   96  150

此外,我們可以用 t() 來求矩陣的轉置 鬼吵, 用 solve() 來求矩陣的逆扣甲。

數(shù)據(jù)框

數(shù)據(jù)框類似矩陣,與矩陣不同的是而柑,數(shù)據(jù)框可以有不同的數(shù)據(jù)類型文捶。

一般做數(shù)據(jù)分析,我們把一個類似 excel 的表格讀入 R 媒咳,默認的格式

就是數(shù)據(jù)框 粹排, 可見數(shù)據(jù)框是一個非常重要的數(shù)據(jù)結構。

一般來說我們需要分析的數(shù)據(jù)涩澡,每一行代表一個樣本顽耳,每一列代表一個

變量。

下面我們用 R 內置的數(shù)據(jù)集 iris 來看一看數(shù)據(jù)框的使用妙同。

> data("iris")
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> tail(iris)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica
> tail(iris, 20)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
131          7.4         2.8          6.1         1.9 virginica
132          7.9         3.8          6.4         2.0 virginica
133          6.4         2.8          5.6         2.2 virginica
134          6.3         2.8          5.1         1.5 virginica
135          6.1         2.6          5.6         1.4 virginica
136          7.7         3.0          6.1         2.3 virginica
137          6.3         3.4          5.6         2.4 virginica
138          6.4         3.1          5.5         1.8 virginica
139          6.0         3.0          4.8         1.8 virginica
140          6.9         3.1          5.4         2.1 virginica
141          6.7         3.1          5.6         2.4 virginica
142          6.9         3.1          5.1         2.3 virginica
143          5.8         2.7          5.1         1.9 virginica
144          6.8         3.2          5.9         2.3 virginica
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica

我們用 data 函數(shù)調入了 iris 這個數(shù)據(jù)集 射富, 然后用 head 函數(shù)來看一看這個數(shù)據(jù)

的前幾行 , tail 函數(shù)來看一看這個數(shù)據(jù)

的后幾行 可以看到有 sepal 的長度粥帚,寬度胰耗,petal 的長度和寬度,還有一個變量

Species 來描述樣本的類別芒涡。

我們可以用 summary 函數(shù)來對數(shù)據(jù)集做大致的了解:

> sum
sum                 summary.Date        summary.POSIXlt     summary.connection  summary.default     summary.glm         summary.manova      summary.proc_time   summary.srcref      summary.table
summary             summary.POSIXct     summary.aov         summary.data.frame  summary.factor      summary.lm          summary.matrix      summary.srcfile     summary.stepfun     summaryRprof
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300
 Median :5.800   Median :3.000   Median :4.350   Median :1.300
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500
       Species
 setosa    :50
 versicolor:50
 virginica :50

可以直觀地看到每個變量的信息柴灯,對于幾個數(shù)值變量卖漫,我們可以看到最小值,中位數(shù)等等統(tǒng)計信息赠群。而對于 Species 這個分類變量羊始,我們看到的是計數(shù)信息。

篩選數(shù)據(jù)框與矩陣相似,都可以通過數(shù)字下標來獲取子集查描,不同地是因為數(shù)據(jù)框有不同的列名,我們也可以通過列名來獲取某一特定列,例如

> iris$Species
  [1] setosa     setosa     setosa     setosa     setosa     setosa
  [7] setosa     setosa     setosa     setosa     setosa     setosa
 [13] setosa     setosa     setosa     setosa     setosa     setosa
 [19] setosa     setosa     setosa     setosa     setosa     setosa
 [25] setosa     setosa     setosa     setosa     setosa     setosa
 [31] setosa     setosa     setosa     setosa     setosa     setosa
 [37] setosa     setosa     setosa     setosa     setosa     setosa
 [43] setosa     setosa     setosa     setosa     setosa     setosa
 [49] setosa     setosa     versicolor versicolor versicolor versicolor
 [55] versicolor versicolor versicolor versicolor versicolor versicolor
 [61] versicolor versicolor versicolor versicolor versicolor versicolor
 [67] versicolor versicolor versicolor versicolor versicolor versicolor
 [73] versicolor versicolor versicolor versicolor versicolor versicolor
 [79] versicolor versicolor versicolor versicolor versicolor versicolor
 [85] versicolor versicolor versicolor versicolor versicolor versicolor
 [91] versicolor versicolor versicolor versicolor versicolor versicolor
 [97] versicolor versicolor versicolor versicolor virginica  virginica
[103] virginica  virginica  virginica  virginica  virginica  virginica
[109] virginica  virginica  virginica  virginica  virginica  virginica
[115] virginica  virginica  virginica  virginica  virginica  virginica
[121] virginica  virginica  virginica  virginica  virginica  virginica
[127] virginica  virginica  virginica  virginica  virginica  virginica
[133] virginica  virginica  virginica  virginica  virginica  virginica
[139] virginica  virginica  virginica  virginica  virginica  virginica
[145] virginica  virginica  virginica  virginica  virginica  virginica
Levels: setosa versicolor virginica

我們可以用 names() 函數(shù)來獲取數(shù)據(jù)框的列名:

> names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

并可以通過為其賦值改變列的名字突委。

列表

列表是一種遞歸式的向量,我們可以用列表來存儲不同類型的數(shù)據(jù),比如

> l <- list(name="youdi" , height=176 , weight = 67, man =  TRUE)
> l
$name
[1] "youdi"

$height
[1] 176

$weight
[1] 67

$man
[1] TRUE

列表有多種索引方式冬三,可以用如下方式獲取匀油。

> l$name
[1] "youdi"
> l$height
[1] 176
> l$man
[1] TRUE
> l[1]
$name
[1] "youdi"

> l[[2]]
[1] 176
> l[['man']]
[1] TRUE

上面的內容涵蓋了 R 語言最基本的數(shù)據(jù)結構.

R 語言學習優(yōu)秀資源

網(wǎng)絡資源

DataCamp : 一個提供云端R語言解釋器的網(wǎng)站 ,提供了多門與數(shù)據(jù)科學有關的課程长豁,可以借助此網(wǎng)站快速上手钧唐。

統(tǒng)計之都 : 國內質量最高的統(tǒng)計網(wǎng)站,有一些關于統(tǒng)計和R語言的優(yōu)秀博客以及與R有關的會議通知匠襟。

肖凱博客(需翻墻): 很有質感的博客钝侠,有大量 R 語言應用的案例。

數(shù)據(jù)科學相關書籍

R for data science : 由 Hadley Wickham 合作編寫的 2017 年出版的書籍 酸舍,主要介紹的 tidyverse 生態(tài) , tidyverse 中包括了 dplyr(用于數(shù)據(jù)處理) , ggplot(用于畫圖)等包帅韧,大幅增強了 R 語言的表現(xiàn)力 , 有免費的在線版本。

R 語言實戰(zhàn) : 一本從統(tǒng)計角度介紹 R 語言的書籍 啃勉,較為簡單 忽舟, 適合快速翻閱。

An Introduction to Statistical Learning : 斯坦福統(tǒng)計系幾位教授出版的統(tǒng)計學習書籍淮阐,對統(tǒng)計學習進行了清晰細致的講解 叮阅, 書有開源版本 ,并且在Stanford Lagunita上有配套課程

Machine Learning For Hackers : 使用機器學習解決問題的一本書 泣特, 有很多有趣的案例 浩姥。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市状您,隨后出現(xiàn)的幾起案子勒叠,更是在濱河造成了極大的恐慌,老刑警劉巖膏孟,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眯分,死亡現(xiàn)場離奇詭異,居然都是意外死亡柒桑,警方通過查閱死者的電腦和手機弊决,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魁淳,“玉大人丢氢,你說我怎么就攤上這事傅联。” “怎么了疚察?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仇奶。 經(jīng)常有香客問我貌嫡,道長,這世上最難降的妖魔是什么该溯? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任岛抄,我火速辦了婚禮,結果婚禮上狈茉,老公的妹妹穿的比我還像新娘夫椭。我一直安慰自己,他們只是感情好氯庆,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布蹭秋。 她就那樣靜靜地躺著,像睡著了一般堤撵。 火紅的嫁衣襯著肌膚如雪仁讨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天实昨,我揣著相機與錄音洞豁,去河邊找鬼。 笑死荒给,一個胖子當著我的面吹牛丈挟,可吹牛的內容都是我干的。 我是一名探鬼主播志电,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼曙咽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了溪北?” 一聲冷哼從身側響起桐绒,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎之拨,沒想到半個月后茉继,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蚀乔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年烁竭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吉挣。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡派撕,死狀恐怖婉弹,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情终吼,我是刑警寧澤镀赌,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站际跪,受9級特大地震影響商佛,放射性物質發(fā)生泄漏。R本人自食惡果不足惜姆打,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一良姆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幔戏,春花似錦玛追、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慨代,卻和暖如春邢笙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侍匙。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工氮惯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人想暗。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓妇汗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親说莫。 傳聞我的和親對象是個殘疾皇子杨箭,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容

  • 《R語言入門》的讀書筆記 本書的重點內容及感悟: 第一章 導言 1、R是一個有著統(tǒng)計分析功能及強大作圖功能的軟件系...
    格式化_001閱讀 12,579評論 0 9
  • Step1:下載和安裝R Windows和OS X用戶可以從CRAN(Comprehensive R Archiv...
    胡阿白閱讀 2,070評論 0 3
  • R語言科學計算 分類統(tǒng)計 mean()储狭,求平均值 min()互婿,求最小值 sd(),求標準差 數(shù)組和矩陣 數(shù)組與矩陣...
    Jtag特工閱讀 4,760評論 1 13
  • 6. 因子(farcor) 在R語言中辽狈,因子是用來處理分類數(shù)據(jù)的慈参,分類數(shù)據(jù)又可以分為有序和無序。我們可以把因子簡單...
    曹務強閱讀 963評論 0 3
  • 06年走出校門,步入社會,10年有余壮锻,從傳統(tǒng)行業(yè)從業(yè)者到全職媽媽琐旁。學習?在我生活中占據(jù)的比重少之又少猜绣。---...
    一心一樂閱讀 285評論 0 0