自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

R語(yǔ)言學(xué)習(xí)筆記(1):R是什么

大數(shù)據(jù)
在學(xué)習(xí)量化投資的時(shí)候,我發(fā)現(xiàn)了R(www.r-project.org)。R到底是什么呢?在開始之前,先看看R的神奇之處。

1. R初窺

從CRAN(The Comprehensive R Archive Network)cran.r-project.org—mirrors.html中選擇一個(gè)鏡像,然后下載合適的安裝包(R支持Linux、Mac OS X和Windows)。

安裝并運(yùn)行R后,可以看到R的控制臺(tái)(我的操作系統(tǒng)是Mac OS):

Start

在R的控制臺(tái)輸入如下命令: 

  1. > install.packages('quantmod') # 安裝quantmod包 
  2. > require(quantmod) #引用quantmod包 
  3. > getSymbols("GOOG",src="yahoo",from="2013-01-01"to='2013-04-24') #從雅虎財(cái)經(jīng)獲取google的股票數(shù)據(jù) 
  4. > chartSeries(GOOG,up.col='red',dn.col='green') #顯示K線圖 > addMACD() #增加MACD圖 

就能夠看到下圖的效果了:

First

最后,退出R:

  1. > q()#Terminate an R Session 

2. R是什么

是不是很神奇?反正當(dāng)時(shí)我完全被Hold住了。

那么R到底是什么?或者說(shuō),R到底是做什么用的?從不同的角度出發(fā),對(duì)R會(huì)有不同的描述。 

從使用角度,R是一個(gè)有著統(tǒng)計(jì)分析功能及強(qiáng)大作圖功能的軟件,在GNU協(xié)議General Public Licence4下免費(fèi)發(fā)行。

從編程角度,R語(yǔ)言是面向?qū)ο蟮慕y(tǒng)計(jì)編程語(yǔ)言,是由AT&T貝爾實(shí)驗(yàn)室所創(chuàng)的S語(yǔ)言發(fā)展出的一種方言。

從計(jì)算角度,R 是一種為統(tǒng)計(jì)計(jì)算和圖形顯示而設(shè)計(jì)的語(yǔ)言及環(huán)境。

從開發(fā)角度,R 是一組開源的數(shù)據(jù)操作,計(jì)算和圖形顯示工具的整合包有各種方式可以進(jìn)行編程調(diào)用。

從架構(gòu)角度,R 是為統(tǒng)計(jì)計(jì)算和圖形展示而設(shè)計(jì)的一個(gè)系統(tǒng)。它包括一種編程語(yǔ)言,高級(jí)別圖形展示函數(shù),和其它語(yǔ)言的接口以及調(diào)試工具。

如果一定要找到一個(gè)與R類似的軟件,那就是商業(yè)軟件Matlab。R和Matlab都是基于編程進(jìn)行數(shù)據(jù)分析的工具,Matlab適用的領(lǐng)域更廣,而R更擅長(zhǎng)統(tǒng)計(jì)分析領(lǐng)域。

與Matlab相比,R更具備開放性

R是自由軟件,Matlab是商業(yè)軟件;

R可以方便的通過“包”進(jìn)行擴(kuò)展,R的核心只有25個(gè)包,但是有幾千個(gè)外部包可以調(diào)用,當(dāng)然你也可以開發(fā)自己的;

R語(yǔ)言比Matlab的要強(qiáng)大;

R和其他編程語(yǔ)言/數(shù)據(jù)庫(kù)之間有很好的接口;其他語(yǔ)言也可以很方便的調(diào)用R的API和結(jié)果對(duì)象。

R常用于金融和統(tǒng)計(jì)領(lǐng)域。大多數(shù)人使用R就是因?yàn)樗慕y(tǒng)計(jì)功能,R的內(nèi)部實(shí)現(xiàn)了很多經(jīng)典的or時(shí)髦的統(tǒng)計(jì)技術(shù)。

 

02e60a9c4fdeb7bd16cdb516d5c6656b

3. R的核心概念

3.1 對(duì)象

R語(yǔ)言是一種面向?qū)ο蟮恼Z(yǔ)言,所有的對(duì)象都有兩個(gè)內(nèi)在屬性:元素類型和長(zhǎng)度。 

元素類型是對(duì)象內(nèi)元素的基本類型,包括:數(shù)值(numeric),字符型(character),復(fù)數(shù)型(complex)、邏輯型(logical)、函數(shù)(function)等,通過mode()函數(shù)可以查看一個(gè)對(duì)象的類型。

長(zhǎng)度是對(duì)象中元素的數(shù)目,通過函數(shù)length()可以查看對(duì)象的長(zhǎng)度。

除了元素類型外,對(duì)象本身也有不同的“類型”,表示不同的數(shù)據(jù)結(jié)構(gòu)(struct)。R中的對(duì)象類型主要包括:

向量(vector): 由一系列有序元素構(gòu)成。

因子(factor):對(duì)同長(zhǎng)的其他向量元素進(jìn)行分類(分組)的向量對(duì)象。R 同時(shí)提供有序(ordered)和無(wú)序(unordered)因子。

數(shù)組(array):帶有多個(gè)下標(biāo)的類型相同的元素的集合

矩陣(matrix):矩陣僅僅是一個(gè)雙下標(biāo)的數(shù)組。R提供了一下函數(shù)專門處理二維數(shù)組(矩陣)。

數(shù)據(jù)框(data frame):和矩陣類似的一種結(jié)構(gòu)。在數(shù)據(jù)框中,列可以是不同的對(duì)象。

時(shí)間序列(time series):包含一些額外的屬性,如頻率和時(shí)間.

列表(list):是一種泛化(general form)的向量。它沒有要求所有元素是同一類型,許多時(shí)候就是向量和列表類型。列表為統(tǒng)計(jì)計(jì)算的結(jié)果返回提供了一種便利的方法。

3.2 常量

R中還定義了一些常量,比如:

NA:表示不可用

Inf: 無(wú)窮

-Inf: 負(fù)無(wú)窮

TRUE:真

FALSE:假

4. R的基本使用

4.1 命令

R是一種語(yǔ)法非常簡(jiǎn)單的表達(dá)式語(yǔ)言(expression language)。使用者通過命令(command)與R進(jìn)行交互。

基本命令要么是表達(dá)式(expressions)要么就是賦值(assignments)。如果一條命令是表達(dá)式,那么它將會(huì)被解析(evaluate),并將結(jié)果顯示在屏幕上,同時(shí)清空該命令所占內(nèi)存。賦值同樣會(huì)解析表達(dá)式并且把值傳給變量但結(jié)果不會(huì)自動(dòng)顯示在屏幕上。

基于命令,可以用交互的方式或者批處理/腳本文件的方式使用R。

4.2 交互式使用 R

交互式shell是一種很方便的環(huán)境,可以進(jìn)行各種嘗試,隨時(shí)調(diào)整過程。與Python、Ruby等語(yǔ)言一樣,R也提供了shell環(huán)境。本文開始的例子就是以交互的方式使用R。當(dāng)打開R控制臺(tái)時(shí),R會(huì)顯示命令提示符">",此時(shí)可以輸入命令。

下面是交互式使用R的幾個(gè)例子:

例一:

  1. > help.start() #啟動(dòng)在線幫助,會(huì)打開瀏覽器。 
  2. > x <- rnorm(50); y <- rnorm(x)  #產(chǎn)生兩個(gè)隨機(jī)向量x和y 
  3. > plot(x,y) #使用x,y畫二維散點(diǎn)圖, 會(huì)打開一個(gè)圖形窗口 
  4. > ls() #查看當(dāng)前工作空間里面的 R 對(duì)象 
  5. > rm(x,y) #清除x,y對(duì)象 
  6. ><- 1:20  # 相當(dāng)于x=(1,2,…,20) 

例二:

  1. <- 1:20#等價(jià)于 x = (1, 2, ..., 20)。  
  2. <- 1 + sqrt(x)/2#標(biāo)準(zhǔn)差的`權(quán)重'向量。  
  3. dummy <- data.frame(xx=x, yx + rnorm(x)*w)#創(chuàng)建一個(gè)由x 和 y構(gòu)成的雙列數(shù)據(jù)框 
  4. dummy #查看dummy對(duì)象中的數(shù)據(jù)。  
  5. fm <- lm(y ~ x, data=dummy)#擬合 y 對(duì) x 的簡(jiǎn)單線性回歸 
  6. summary(fm)#查看分析結(jié)果。  
  7. fm1 <- lm(y ~ x, data=dummyweight=1/w^2)#加權(quán)回歸 
  8. summary(fm1)#查看分析結(jié)果。 
  9. attach(dummy)#讓數(shù)據(jù)框中的列項(xiàng)可以像一般的變量那樣使用。  
  10. lrf <- lowess(x, y)#做一個(gè)非參局部回歸。  
  11. plot(x, y)#標(biāo)準(zhǔn)散點(diǎn)圖。  
  12. lines(x, lrf$y)#增加局部回歸曲線。  
  13. abline(0, 1, lty=3)#真正的回歸曲線:(截距 0,斜率 1)。  
  14. abline(coef(fm))#無(wú)權(quán)重回歸曲線。  
  15. abline(coef(fm1), col = "red")#加權(quán)回歸曲線。 detach()#將數(shù)據(jù)框從搜索路徑中去除。 
  16. plot(fitted(fm), resid(fm), xlab="Fitted values"ylab="Residuals"main="Residuals vs Fitted")一個(gè)檢驗(yàn)異方差性(heteroscedasticity)的標(biāo)準(zhǔn)回歸診斷圖。 
  17. qqnorm(resid(fm), main="Residuals Rankit Plot")#用正態(tài)分值圖檢驗(yàn)數(shù)據(jù)的偏度(skewness),峰度(kurtosis)和異常值(outlier)。 
  18. rm(fm, fm1, lrf, x, dummy)#再次清空。 

例三: Michaelson 和 Morley 測(cè)量光速的經(jīng)典實(shí)驗(yàn)

  1. filepath <- system.file("data", "morley.tab" , package="datasets")#從對(duì)象 morley 中得到實(shí)驗(yàn)數(shù)據(jù)的文件路徑 
  2.  
  3. filepath#查看文件路徑 
  4.  
  5. file.show(filepath)#查看文件內(nèi)容 
  6.  
  7. mm <- read.table(filepath)#以數(shù)據(jù)框的形式讀取數(shù)據(jù) 
  8.  
  9. mm$Expt <- factor(mm$Expt) 
  10.  
  11. mm$Run <- factor(mm$Run)#將 Expt 和 Run 改為因子。  
  12.  
  13. attach(mm)#讓數(shù)據(jù)在位置 3 (默認(rèn)) 可見(即可以直接訪問)。  
  14.  
  15. plot(Expt, Speed, main="Speed of Light Data"xlab="Experiment No.")#用簡(jiǎn)單的盒狀圖比較五次實(shí)驗(yàn)。  
  16.  
  17. fm <- aov(Speed ~ Run + Expt, data=mm)#分析隨機(jī)區(qū)組,`runs' 和 `experiments' 作為因子。  
  18.  
  19. summary(fm) 
  20.  
  21.   
  22.  
  23. fm0 <- update(fm, . ~ . - Run) 
  24.  
  25. anova(fm0, fm)#擬合忽略 `runs' 的子模型,并且對(duì)模型更改前后進(jìn)行方差分析。  
  26.  
  27. detach() 
  28.  
  29. rm(fm, fm0)#在進(jìn)行下面工作前,清空數(shù)據(jù)。 
  30.  
  31.   
  32.  
  33.   
  34.  
  35. #下面是等高線和影像顯示的示例 
  36.  
  37. <- seq(-pi, pi, len=50)#x 是一個(gè)在區(qū)間 [-pi\, pi] 內(nèi)等間距的50個(gè)元素的向量 
  38.  
  39. <- x 
  40.  
  41.   
  42.  
  43. <- outer(x, y, function(x, y) cos(y)/(1 + x^2))#f 是一個(gè)方陣,行列分別被 x 和 y 索引,對(duì)應(yīng)的值是函數(shù) cos(y)/(1 + x^2) 的結(jié)果。  
  44.  
  45. oldpar <- par(no.readonly = TRUE
  46.  
  47. par(pty="s")#保存圖形參數(shù),設(shè)定圖形區(qū)域?yàn)?ldquo;正方形”。  
  48.  
  49. contour(x, y, f) 
  50.  
  51. contour(x, y, f, nlevels=15add=TRUE)#繪制 f 的等高線;增加一些曲線顯示細(xì)節(jié)。  
  52.  
  53. fa <- (f-t(f))/2#fa 是 f 的“非對(duì)稱部分”(t() 是轉(zhuǎn)置函數(shù))。  
  54.  
  55. contour(x, y, fa, nlevels=15)#畫等高線 
  56.  
  57. par(oldpar)# 恢復(fù)原始的圖形參數(shù) 
  58.  
  59. image(x, y, f) 
  60.  
  61. image(x, y, fa)#繪制一些高密度的影像顯示 
  62.  
  63. objects();  
  64.  
  65. rm(x, y, f, fa)#在繼續(xù)下一步前,清空數(shù)據(jù)。 
  66.  
  67.   
  68.  
  69. th <- seq(-pi, pi, len=100
  70.  
  71. <- exp(1i*th)#1i 表示復(fù)數(shù) i 
  72.  
  73.   
  74.  
  75. par(pty="s"
  76.  
  77. plot(z, type="l")#圖形參數(shù)是復(fù)數(shù)時(shí),表示虛部對(duì)實(shí)部畫圖。這可能是一個(gè)圓。  
  78.  
  79. <- rnorm(100) + rnorm(100)*1i#假定我們想在這個(gè)圓里面隨機(jī)抽樣。一種方法將讓復(fù)數(shù)的虛部和實(shí)部值是標(biāo)準(zhǔn)正態(tài)隨機(jī)數(shù) ...  
  80.  
  81. <- ifelse(Mod(w) > 1, 1/w, w)#將圓外的點(diǎn)映射成它們的倒數(shù)。  
  82.  
  83. plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+",xlab="x"ylab="y"
  84.  
  85. lines(z)#所有的點(diǎn)都在圓中,但分布不是均勻的。  
  86.  
  87.   
  88.  
  89. #下面采用均勻分布?,F(xiàn)在圓盤中的點(diǎn)看上去均勻多了。  
  90.  
  91. <- sqrt(runif(100))*exp(2*pi*runif(100)*1i) 
  92.  
  93. plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+"xlab="x"ylab="y"
  94.  
  95. lines(z) 
  96.  
  97. rm(th, w, z)#再次清空。  
  98.  
  99. q()#離開 R 程序 

4.3 工作空間(workspace)

R shell 可以任意地保存一個(gè)完整的環(huán)境,稱為工作空間(workspace)。前面的例子中,運(yùn)行q()命令退出R時(shí),會(huì)被詢問是否要保存工作空間:

2013 05 02  9 34 53

 

工作空間(workspace)保存了一些環(huán)境信息。每次與R的會(huì)話(session)可以從一個(gè)全新的環(huán)境開始,也可以在原來(lái)的基礎(chǔ)上繼續(xù),這些運(yùn)行信息就保存在工作空間中。

如果在UNIX系統(tǒng)以命令行的方式啟動(dòng)R,則當(dāng)前目錄就是本次會(huì)話的工作空間:

$ mkdir r_test

$ cd r_test/

$ R

看看R能為工作空間保存些什么內(nèi)容:

> x <- rnorm(50); y <- rnorm(x)  #產(chǎn)生兩個(gè)隨機(jī)向量x和y

> q()

Save workspace image? [y/n/c]: y

$ ls -Al

會(huì)發(fā)現(xiàn)R保存了兩個(gè)隱藏文件:.RData和.Rhistory。其中.RData以二進(jìn)制的方式保存了會(huì)話中的變量值,.Rhistory以文本文件的方式保存了會(huì)話中的所有命令。

如果在一個(gè)已有的工作空間中啟動(dòng)R,會(huì)提示:

[原來(lái)保存的工作空間已還原]

此時(shí)可以用函數(shù)ls()和history()看到之前保存的數(shù)據(jù)和命令。

使用rm()/remove()可以刪除工作空間中的變量。

在R控制臺(tái),也可以使用函數(shù)getwd()和setwd()來(lái)獲取/設(shè)置工作空間目錄;使用list.files()查看當(dāng)前目錄下的文件。

如果以GUI方式運(yùn)行R控制臺(tái),可以通過菜單來(lái)加載或保存工作空間。

4.4 腳本/批處理

前面提到R可以在工作空間中保存歷史命令。其實(shí)這就是一個(gè)工作空間中的默認(rèn)腳本,當(dāng)加載工作空間時(shí)自動(dòng)執(zhí)行。

我們完全可以寫自己的腳本,指定R批量執(zhí)行一些命令。通常,自己的腳本會(huì)以“.R”作為擴(kuò)展名。一個(gè)最簡(jiǎn)單的例子test.R:

x <- rnorm(50); y <- rnorm(x)  #產(chǎn)生兩個(gè)隨機(jī)向量x和y

plot(x,y) #使用x,y畫二維散點(diǎn)圖, 會(huì)打開一個(gè)圖形窗口

并保存到工作空間,然后在R控制臺(tái),使用命令:

> source('test.R')

就可以執(zhí)行該腳本。

> source('test.R', echo=TRUE)可以讓腳本執(zhí)行時(shí)輸出更詳細(xì)的信息。

 

編寫腳本自動(dòng)執(zhí)行一些任務(wù)時(shí),sink()函數(shù)會(huì)比較有用:

     > sink("record.lis")

會(huì)把所有后續(xù)的輸出結(jié)果從控制臺(tái)重定向到外部文件 record.lis 中,此時(shí)控制臺(tái)中看不到命令輸出的結(jié)果。使用命令:

     > sink()

可以讓輸出流重新定向到控制臺(tái)。

5. 幫助系統(tǒng)

GNU軟件通常都會(huì)有非常好的幫助系統(tǒng),無(wú)論對(duì)于初學(xué)者還是熟練者都能帶來(lái)很大的幫助。R當(dāng)然也不例外。R中提供的幫助主要有以下幾種:

5.1 文檔和搜索

 help.start()  命令會(huì)打開瀏覽器,顯示幫助文檔。包括一些入門的文檔,以及搜索功能(鏈接:Search Engine & Keywords)。

 

D12e79b600aa14a7fa3f195de1a20f2d

 

5.2 演示

demo()會(huì)按照包分組,列出所有可用的演示:

F5801597baf3693319070b7f4b90dc6e

 

按照名稱可以開始演示,如:

demo(is.things)

 

5.3 函數(shù)幫助

如果已經(jīng)知道一個(gè)函數(shù)的名稱(比如solve),需要了解其所屬的包、用途、用法、參數(shù)說(shuō)明、返回值、參考文獻(xiàn)、相關(guān)函數(shù)以及范例等,可以使用命令

 help(solve)或 ?solve

該命令會(huì)彈出一個(gè)窗口:

8f66186022f13ec96cfafa4e55ca36d6

5.4 函數(shù)示例

對(duì)于函數(shù),還可以使用example()執(zhí)行示例,比如:

example(solve)

5.5 關(guān)鍵字和運(yùn)算符

與函數(shù)的幫助類似,但是需要加上引號(hào),如:

> ? '[['   # 等價(jià)于 help('[[')

> ?'+'    #等價(jià)于 help('+')

> ?'if'    #等價(jià)于 help('if')

5.6 搜索

如果不知道函數(shù)名稱,還可以進(jìn)行搜索,比如:

??'analysis'  #等價(jià)于 search('analysis')

4fbbda486d8363e6610e034ed52cccc8

5.7 官方搜索

前面的幫助都受限于本地環(huán)境已經(jīng)安裝的包。如果要搜索R中所有的資源(包,函數(shù)、數(shù)學(xué)方法等),需要在R的官方網(wǎng)站搜索:

www.r-project.org—search.html

6. 學(xué)習(xí)資料

www.R-project.org   R官方網(wǎng)站

cran.r-project.org—manuals.html   官方網(wǎng)站上的一些手冊(cè)和文檔(必看)

staff.washington.edu—Rcourse   華盛頓大學(xué)的一個(gè)R教程

原文鏈接:http://www.cnblogs.com/holbrook/archive/2013/05/03/3056211.html

責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2013-05-14 09:42:36

R語(yǔ)言

2016-11-11 14:12:19

R語(yǔ)言

2013-05-10 15:27:07

R語(yǔ)言

2015-08-18 09:42:25

2017-04-05 18:10:05

R語(yǔ)言開發(fā)Ross

2009-08-14 15:54:12

C#編程語(yǔ)言

2025-02-20 15:32:28

2009-09-04 08:51:33

Java語(yǔ)言

2015-07-02 09:40:57

R語(yǔ)言優(yōu)勢(shì)缺點(diǎn)

2010-06-03 11:34:42

Hadoop

2013-05-24 10:01:40

R語(yǔ)言

2017-08-08 10:55:03

大數(shù)據(jù)R語(yǔ)言數(shù)據(jù)分析

2014-02-27 16:01:26

R語(yǔ)言編程語(yǔ)言趨勢(shì)

2010-01-27 16:52:31

C++語(yǔ)言學(xué)習(xí)

2009-08-28 17:19:15

C#語(yǔ)言學(xué)習(xí)

2010-01-15 10:32:21

C++語(yǔ)言

2015-01-12 09:40:41

iOS學(xué)習(xí)資料整理

2015-01-12 12:12:00

iOS學(xué)習(xí)資料整理

2009-10-19 09:16:08

VB.NET語(yǔ)言

2012-02-13 15:48:42

Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)