R學習筆記(1):R是什么

本文最新版已更新至http://thinkinside.tk/2013/05/03/r_notes_1_what.html?

63861f069721d85604486f6eb5f1c0c6Ab61fe310a4a1c66d210d7e8c0aaad13

?

在學習量化投資的時候,我發現了R(www.r-project.org)。R到底是什么呢?在開始之前,先看看R的神奇之處。

1. R初窺

從CRAN(The Comprehensive R Archive Network)cran.r-project.org—mirrors.html中選擇一個鏡像,然后下載合適的安裝包(R支持Linux、Mac OS X和Windows)。
安裝并運行R后,可以看到R的控制臺(我的操作系統是Mac OS):

Start

?
在R的控制臺輸入如下命令: 
> install.packages('quantmod') # 安裝quantmod包
> require(quantmod) #引用quantmod包
> getSymbols("GOOG",src="yahoo",from="2013-01-01", to='2013-04-24') #從雅虎財經獲取google的股票數據
> chartSeries(GOOG,up.col='red',dn.col='green')  #顯示K線圖
> addMACD() #增加MACD圖
?
就能夠看到下圖的效果了:
?

First

最后,退出R:
> q()#Terminate an R Session
 

2. R是什么

是不是很神奇?反正當時我完全被Hold住了。
那么R到底是什么?或者說,R到底是做什么用的?從不同的角度出發,對R會有不同的描述。 
  • 從使用角度,R是一個有著統計分析功能及強大作圖功能的軟件,在GNU協議General Public Licence4下免費發行。
  • 從編程角度,R語言是面向對象的統計編程語言,是由AT&T貝爾實驗室所創的S語言發展出的一種方言。
  • 從計算角度,R 是一種為統計計算和圖形顯示而設計的語言及環境。
  • 從開發角度,R 是一組開源的數據操作,計算和圖形顯示工具的整合包有各種方式可以進行編程調用。
  • 從架構角度,R 是為統計計算和圖形展示而設計的一個系統。它包括一種編程語言,高級別圖形展示函數,和其它語言的接口以及調試工具。
如果一定要找到一個與R類似的軟件,那就是商業軟件Matlab。R和Matlab都是基于編程進行數據分析的工具,Matlab適用的領域更廣,而R更擅長統計分析領域。
?
與Matlab相比,R更具備開放性:
  • R是自由軟件,Matlab是商業軟件;
  • R可以方便的通過“包”進行擴展,R的核心只有25個包,但是有幾千個外部包可以調用,當然你也可以開發自己的;
  • R語言比Matlab的要強大;
  • R和其他編程語言/數據庫之間有很好的接口;其他語言也可以很方便的調用R的API和結果對象。
?
R常用于金融和統計領域。大多數人使用R就是因為它的統計功能,R的內部實現了很多經典的or時髦的統計技術。
?

02e60a9c4fdeb7bd16cdb516d5c6656b

?
?
?

3. R的核心概念

3.1 對象

R語言是一種面向對象的語言,所有的對象都有兩個內在屬性:元素類型和長度。 
元素類型是對象內元素的基本類型,包括:數值(numeric),字符型(character),復數型(complex)、邏輯型(logical)、函數(function)等,通過mode()函數可以查看一個對象的類型。
長度是對象中元素的數目,通過函數length()可以查看對象的長度。
除了元素類型外,對象本身也有不同的“類型”,表示不同的數據結構(struct)。R中的對象類型主要包括:
向量(vector): 由一系列有序元素構成。
因子(factor):對同長的其他向量元素進行分類(分組)的向量對象。R 同時提供有序(ordered)和無序(unordered)因子。
數組(array):帶有多個下標的類型相同的元素的集合
矩陣(matrix):矩陣僅僅是一個雙下標的數組。R提供了一下函數專門處理二維數組(矩陣)。
數據框(data frame):和矩陣類似的一種結構。在數據框中,列可以是不同的對象。
時間序列(time series):包含一些額外的屬性,如頻率和時間.
列表(list):是一種泛化(general form)的向量。它沒有要求所有元素是同一類型,許多時候就是向量和列表類型。列表為統計計算的結果返回提供了一種便利的方法。

3.2 常量

R中還定義了一些常量,比如:
NA:表示不可用
Inf: 無窮
-Inf: 負無窮
TRUE:真
FALSE:假
?

4. R的基本使用

4.1 命令

R是一種語法非常簡單的表達式語言(expression language)。使用者通過命令(command)與R進行交互。
?
基本命令要么是表達式(expressions)要么就是賦值(assignments)。如果一條命令是表達式,那么它將會被解析(evaluate),并將結果顯示在屏幕上,同時清空該命令所占內存。賦值同樣會解析表達式并且把值傳給變量但結果不會自動顯示在屏幕上。
?
基于命令,可以用交互的方式或者批處理/腳本文件的方式使用R。

4.2 交互式使用 R

交互式shell是一種很方便的環境,可以進行各種嘗試,隨時調整過程。與Python、Ruby等語言一樣,R也提供了shell環境。本文開始的例子就是以交互的方式使用R。當打開R控制臺時,R會顯示命令提示符">",此時可以輸入命令。
下面是交互式使用R的幾個例子:
?
例一:
> help.start() #啟動在線幫助,會打開瀏覽器。
> x <- rnorm(50); y <- rnorm(x)  #產生兩個隨機向量x和y
> plot(x,y) #使用x,y畫二維散點圖, 會打開一個圖形窗口
> ls() #查看當前工作空間里面的 R 對象
> rm(x,y) #清除x,y對象
>x <- 1:20  # 相當于x=(1,2,…,20)
例二:
x <- 1:20#等價于 x = (1, 2, ..., 20)。 

w <- 1 + sqrt(x)/2#標準差的`權重'向量。 

dummy <- data.frame(x=x, y= x + rnorm(x)*w)#創建一個由x 和 y構成的雙列數據框

dummy #查看dummy對象中的數據。 

fm <- lm(y ~ x, data=dummy)#擬合 y 對 x 的簡單線性回歸

summary(fm)#查看分析結果。 

fm1 <- lm(y ~ x, data=dummy, weight=1/w^2)#加權回歸

summary(fm1)#查看分析結果。
attach(dummy)#讓數據框中的列項可以像一般的變量那樣使用。 

lrf <- lowess(x, y)#做一個非參局部回歸。 

plot(x, y)#標準散點圖。 

lines(x, lrf$y)#增加局部回歸曲線。 

abline(0, 1, lty=3)#真正的回歸曲線:(截距 0,斜率 1)。 

abline(coef(fm))#無權重回歸曲線。 

abline(coef(fm1), col = "red")#加權回歸曲線。 

detach()#將數據框從搜索路徑中去除。 

plot(fitted(fm), resid(fm),xlab="Fitted values",ylab="Residuals",main="Residuals vs Fitted")一個檢驗異方差性(heteroscedasticity)的標準回歸診斷圖。 qqnorm(resid(fm), main="Residuals Rankit Plot")#用正態分值圖檢驗數據的偏度(skewness),峰度(kurtosis)和異常值(outlier)。

rm(fm, fm1, lrf, x, dummy)#再次清空。

例三: Michaelson 和 Morley 測量光速的經典實驗
filepath <- system.file("data", "morley.tab" , package="datasets")#從對象 morley 中得到實驗數據的文件路徑

filepath#查看文件路徑

file.show(filepath)#查看文件內容

mm <- read.table(filepath)#以數據框的形式讀取數據

mm$Expt <- factor(mm$Expt)mm$Run <- factor(mm$Run)#將 Expt 和 Run 改為因子。 

attach(mm)#讓數據在位置 3 (默認) 可見(即可以直接訪問)。 

plot(Expt, Speed, main="Speed of Light Data", xlab="Experiment No.")#用簡單的盒狀圖比較五次實驗。 

fm <- aov(Speed ~ Run + Expt, data=mm)#分析隨機區組,`runs' 和 `experiments' 作為因子。 

summary(fm)fm0 <- update(fm, . ~ . - Run)anova(fm0, fm)#擬合忽略 `runs' 的子模型,并且對模型更改前后進行方差分析。 

detach()rm(fm, fm0)#在進行下面工作前,清空數據。#下面是等高線和影像顯示的示例

x <- seq(-pi, pi, len=50)#x 是一個在區間 [-pi\, pi] 內等間距的50個元素的向量

y <- xf <- outer(x, y, function(x, y) cos(y)/(1 + x^2))#f 是一個方陣,行列分別被 x 和 y 索引,對應的值是函數 cos(y)/(1 + x^2) 的結果。 

oldpar <- par(no.readonly = TRUE)par(pty="s")#保存圖形參數,設定圖形區域為“正方形”。 

contour(x, y, f)contour(x, y, f, nlevels=15, add=TRUE)#繪制 f 的等高線;增加一些曲線顯示細節。 

fa <- (f-t(f))/2#fa 是 f 的“非對稱部分”(t() 是轉置函數)。 

contour(x, y, fa, nlevels=15)#畫等高線

par(oldpar)# 恢復原始的圖形參數

image(x, y, f)image(x, y, fa)#繪制一些高密度的影像顯示

objects(); rm(x, y, f, fa)#在繼續下一步前,清空數據。
th <- seq(-pi, pi, len=100)z <- exp(1i*th)#1i 表示復數 i
par(pty="s")plot(z, type="l")#圖形參數是復數時,表示虛部對實部畫圖。這可能是一個圓。 

w <- rnorm(100) + rnorm(100)*1i#假定我們想在這個圓里面隨機抽樣。一種方法將讓復數的虛部和實部值是標準正態隨機數 ... 

w <- ifelse(Mod(w) > 1, 1/w, w)#將圓外的點映射成它們的倒數。 

plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+",xlab="x", ylab="y")lines(z)#所有的點都在圓中,但分布不是均勻的。 #下面采用均勻分布。現在圓盤中的點看上去均勻多了。 

w <- sqrt(runif(100))*exp(2*pi*runif(100)*1i)plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+", xlab="x", ylab="y")lines(z)rm(th, w, z)#再次清空。 

q()#離開 R 程序

?

?

4.3 工作空間(workspace)

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

2013 05 02  9 34 53

?
工作空間(workspace)保存了一些環境信息。每次與R的會話(session)可以從一個全新的環境開始,也可以在原來的基礎上繼續,這些運行信息就保存在工作空間中。
如果在UNIX系統以命令行的方式啟動R,則當前目錄就是本次會話的工作空間:
$ mkdir r_test
$ cd r_test/
$ R
看看R能為工作空間保存些什么內容:
> x <- rnorm(50); y <- rnorm(x)? #產生兩個隨機向量x和y
> q()
Save workspace image? [y/n/c]: y
$ ls -Al
會發現R保存了兩個隱藏文件:.RData和.Rhistory。其中.RData以二進制的方式保存了會話中的變量值,.Rhistory以文本文件的方式保存了會話中的所有命令。
如果在一個已有的工作空間中啟動R,會提示:
[原來保存的工作空間已還原]
此時可以用函數ls()和history()看到之前保存的數據和命令。
使用rm()/remove()可以刪除工作空間中的變量。
?
在R控制臺,也可以使用函數getwd()和setwd()來獲取/設置工作空間目錄;使用list.files()查看當前目錄下的文件。
?
如果以GUI方式運行R控制臺,可以通過菜單來加載或保存工作空間。

4.4 腳本/批處理

前面提到R可以在工作空間中保存歷史命令。其實這就是一個工作空間中的默認腳本,當加載工作空間時自動執行。
我們完全可以寫自己的腳本,指定R批量執行一些命令。通常,自己的腳本會以“.R”作為擴展名。一個最簡單的例子test.R:
x <- rnorm(50); y <- rnorm(x)? #產生兩個隨機向量x和y
plot(x,y) #使用x,y畫二維散點圖, 會打開一個圖形窗口
并保存到工作空間,然后在R控制臺,使用命令:
> source('test.R')
就可以執行該腳本。
> source('test.R', echo=TRUE)可以讓腳本執行時輸出更詳細的信息。
?
編寫腳本自動執行一些任務時,sink()函數會比較有用:
?? ? > sink("record.lis")
會把所有后續的輸出結果從控制臺重定向到外部文件 record.lis 中,此時控制臺中看不到命令輸出的結果。使用命令:
?? ? > sink()

可以讓輸出流重新定向到控制臺。

5. 幫助系統

GNU軟件通常都會有非常好的幫助系統,無論對于初學者還是熟練者都能帶來很大的幫助。R當然也不例外。R中提供的幫助主要有以下幾種:

5.1 文檔和搜索

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

D12e79b600aa14a7fa3f195de1a20f2d

?

5.2 演示

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

F5801597baf3693319070b7f4b90dc6e

?
按照名稱可以開始演示,如:
demo(is.things)
?

5.3 函數幫助

如果已經知道一個函數的名稱(比如solve),需要了解其所屬的包、用途、用法、參數說明、返回值、參考文獻、相關函數以及范例等,可以使用命令
?help(solve)或 ?solve
該命令會彈出一個窗口:

8f66186022f13ec96cfafa4e55ca36d6

5.4 函數示例

對于函數,還可以使用example()執行示例,比如:
example(solve)

5.5 關鍵字和運算符

與函數的幫助類似,但是需要加上引號,如:
> ? '[[' ? # 等價于 help('[[')
> ?'+'? ? #等價于 help('+')
> ?'if'? ? #等價于 help('if')

5.6 搜索

如果不知道函數名稱,還可以進行搜索,比如:
??'analysis'? #等價于 search('analysis')

4fbbda486d8363e6610e034ed52cccc8

5.7 官方搜索

前面的幫助都受限于本地環境已經安裝的包。如果要搜索R中所有的資源(包,函數、數學方法等),需要在R的官方網站搜索:
www.r-project.org—search.html

6. 學習資料

www.R-project.org   R官方網站
cran.r-project.org—manuals.html   官方網站上的一些手冊和文檔(必看)
staff.washington.edu—Rcourse   華盛頓大學的一個R教程

轉載于:https://www.cnblogs.com/holbrook/archive/2013/05/03/3056211.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378464.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378464.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle網卡,Oracle_bond網卡配置

***************************loyu*******************************************************雙網卡創建bond虛擬網卡實驗*************************cat > /etc/sysconfig/network-scripts/ifcfg-bond0 << EofDEVICEbond0BOOTPROTOstaticONBOOTyesIPADDR172.16.116.60N…

Python | 展示一個break語句示例

break is a keyword in python just like another programming language and it is used to break the execution of loop statement. 就像另一種編程語言一樣&#xff0c; break是python中的關鍵字&#xff0c;用于中斷loop語句的執行。 In the given example, loop is runni…

數字圖像處理知識總結

一&#xff1a;基本概念 數字圖像&#xff1a;指由被稱作像素的小塊區域組成的二維矩陣。將物理圖像行列劃分后&#xff0c;每個小塊區域稱為像素&#xff08;pixel&#xff09;。每個像素包括兩個屬性&#xff1a;位置和灰度。圖像數字化一般分為采樣、量化與編碼三個步驟。數…

三、“滌綸纖維和棉纖維兩組分纖維在滌/棉混紡織物燃燒過程中有著明顯的物理相互作用和化學相互作用”,解釋這兩種作用。

“滌綸纖維和棉纖維兩組分纖維在滌/棉混紡織物燃燒過程中有著明顯的物理相互作用和化學相互作用”,解釋這兩種作用。 收集資料階段 棉纖維燃燒后炭化,而滌綸燃燒時熔融滴落,由于棉纖維成為支持體,可使熔融纖維聚集,并阻止其滴落,使熔融纖維燃燒更加劇烈,即所謂"支架效應…

關于性能測試的通俗解釋

關于性能測試的通俗解釋: http://www.docin.com/p-645879730.html 轉載于:https://www.cnblogs.com/preftest/archive/2013/05/03/3057231.html

oracle marley,滾石雜志500大專輯,對歐美音樂感興趣的可以找來聽聽。

滾石雜志于2003年11月評選出的滾石雜志五百大專輯。值得一提的是&#xff0c;披頭士樂隊占據了前五中的三席&#xff0c;前五十中的7席&#xff0c;正式出版的專輯幾乎全部入選前五百。排名 演唱者 專輯001 披頭士樂隊(The Beatles) Sgt. Peppers Lonely Hearts Club Band002 海…

ci中使用smarty

<p>d</p> <?php defined(BASEPATH) or die(Access restricted!);/** 作者&#xff1a;晉勇*/require(APPPATH.libraries/smarty/Smarty.class.php);classCismarty extendsSmarty{public$exttpl;public$dir;public$layoutlayout/main;/** * 構造函數 * * access…

kinect中psi是什么_PSI的完整形式是什么?

kinect中psi是什么PSI&#xff1a;每平方英寸磅/國際人口服務 (PSI: Pound per Square Inch / Population Services International) 1)PSI&#xff1a;每平方英寸磅 (1) PSI: Pound per Square Inch) PSI is an abbreviation of Pound per Square Inch. Pound per Square Inch …

jupyter notebook指定工作目錄

【1】打開Anaconda Navigator 打開Anaconda Navigator&#xff0c;點擊左側Environments&#xff0c;點擊base(root)->open Terminal 【2】輸入指令jupyter notebook --generate-config 按下回車鍵&#xff0c;彈出config所在位置。 以VS Code打開文件 【3】修改第26…

四、纖維素纖維使用P-N系阻燃劑協同作用的原理?

纖維素纖維使用P-N系阻燃劑協同作用的原理? 收集資料階段 某些含氮、磷化合物可以增強化合物的阻燃性,原因就是磷、氮在反應過程中形成含 N-P 鍵的中間體,可以改善羰基反應活性和磷酰化速率,進而提高成炭率;另一個重要的原因是氮化合物可以延緩凝聚相中含磷化合物的會揮發…

oracle tns 連接關閉,ORA-12537 TNS:連接關閉

今天遇到&#xff1a;ORA-12537 TNS&#xff1a;連接關閉&#xff0c;監聽正常&#xff0c;集群正常&#xff0c;數據庫正常&#xff0c;查了一下才發現問題。LISTENER日志報錯TNS-12546: TNS:permission deniedTNS-12560: TNS:protocol adapter errorTNS-00516: Permission de…

多模態大模型:關于RLHF那些事兒

Overview 多模態大模型關于RLHF的代表性文章一、LLaVA-RLHF二、RLHF-V三、SILKIE多模態大模型關于RLHF的代表性文章 一、LLaVA-RLHF 題目: ALIGNING LARGE MULTIMODAL MODELS WITH FACTUALLY AUGMENTED RLHF 機構:UC伯克利 論文: https://arxiv.org/pdf/2309.14525.pdf 代碼…

c# 整數類型轉byte_C#中數據類型的整數類型

c# 整數類型轉byteHere is the list of the built-in integral types of data types in C#, sbyte, byte, char, short, ushort, int, uint, long and ulong 這是C&#xff03;&#xff0c; sbyte &#xff0c; byte &#xff0c; char &#xff0c; short &#xff0c; ushort…

COM+組件注冊方法

COM組件注冊方法 有兩種方式注冊組件&#xff1a;一種是調用regsvr32.exe&#xff1a;例如我們運行regsvr32.exe c:\test.dll來注冊位于C:盤根目錄下的test.dll。另外一種是在MTS&#xff08;微軟事務服務器&#xff09;中注冊。MTS是值得推薦的&#xff0c;因為它具有下列優點…

【智能車Code review】—曲率計算、最小二乘法擬合

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 系列文章 【智能車Code review】—曲率計算、最小二乘法擬合 【智能車Code review】——坡道圖像與控制處理 【智能車Code re…

五、“嵌段共聚醚酯型”易去污整理劑的結構特點及對織物服用性的影響?

“嵌段共聚醚酯型”易去污整理劑的結構特點及對織物服用性的影響? 收集資料階段 嵌段共聚醚酯型易去污整理劑(簡稱聚醚酯)是滌綸最早的一種耐久性易去污劑,其商品名稱為Permalose T,由英國ICI公司生產,它能使滌綸及其混紡織物具有優良的易去污、抗濕再沾污和抗靜電性能。…

linux服務器指示燈,【轉】明明白白你的Linux服務器——故障篇 | 旺旺知識庫

在Linux/unix服務器的維護過程中&#xff0c;遇到各種各樣的問題&#xff1b;有的嚴重&#xff0c;有的很好解決&#xff0c;有的解決過程我就記錄下來與大家分享下&#xff0c;希望能給大家帶來幫助。故障一、今天早上來的第一件事&#xff0c;就是檢查昨天晚上剛剛重新安裝的…

構件圖(Component Diagram)—UML圖(八)

構件圖是顯示代碼自身結構的實現級別的圖表。構件圖由諸如源代碼文件、二進制代碼文件、可執行文件或動態鏈接庫 (DLL) 這樣的構件構成&#xff0c;并通過依賴關系相連接 下面這張圖介紹了構件圖的基本內容&#xff1a; 下面這張圖是個構件圖的實例&#xff1a; 轉載于:https:/…

GAE work

https://appengine.google.com/ can visit in Home, but cannot visit in Office.Download a java SDK for GAE, will write something here.轉載于:https://www.cnblogs.com/cnyao/archive/2011/05/05/2038161.html

二進制文件簽名_二進制數的簽名表示

二進制文件簽名Prerequisite: Number systems 先決條件&#xff1a; 數字系統 Until now, we have only talked about positive numbers and have already discussed their mathematical operations. But there also exists negative numbers in the number system, in this a…