版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1.1統(tǒng)計(jì)分析概述1.2現(xiàn)有統(tǒng)計(jì)軟件簡(jiǎn)介1.3R下載安裝及使用1.4Python下載安裝及使用第1章引言
引言統(tǒng)計(jì)分析軟件簡(jiǎn)介Excel、SPSS、SAS、Matlab,S-plusPython、RPython語言簡(jiǎn)介下載和安裝PythonAnaconda運(yùn)行PythonR語言簡(jiǎn)介下載和安裝RRstudioMarkdown常用的R包R包和R包合集的安裝R包的使用、更新、遷移數(shù)據(jù)分析的未來要求
1.統(tǒng)計(jì)學(xué)、數(shù)學(xué)、計(jì)算機(jī)等專業(yè)優(yōu)先,有統(tǒng)計(jì)學(xué)應(yīng)用基礎(chǔ);
2.兩年以上移動(dòng)互聯(lián)網(wǎng)行業(yè)數(shù)據(jù)分析經(jīng)驗(yàn),社交類項(xiàng)目經(jīng)驗(yàn)更優(yōu);
3.具備產(chǎn)品經(jīng)理經(jīng)驗(yàn),理解產(chǎn)品設(shè)計(jì)原理與產(chǎn)品邏輯。參與過產(chǎn)品設(shè)計(jì)與執(zhí)行;
4.邏輯思維能力強(qiáng),表達(dá)能力強(qiáng);
5.熟練運(yùn)用各種內(nèi)外部數(shù)據(jù)統(tǒng)計(jì)工具,快速響應(yīng)各個(gè)部門的數(shù)據(jù)需求,至少掌握一種統(tǒng)計(jì)分析工具,如SAS、SPSS、R等;
6.重視數(shù)據(jù)可視化呈現(xiàn),報(bào)告撰寫能力強(qiáng);
7.好奇心強(qiáng),對(duì)數(shù)據(jù)執(zhí)著,對(duì)問題刨根問底。1.1統(tǒng)計(jì)分析概述數(shù)據(jù)分析的未來熱門職位發(fā)展“錢”途良好。統(tǒng)計(jì)學(xué)就業(yè)前景統(tǒng)計(jì)分析的特點(diǎn)1.模型只能是對(duì)客觀世界的一種近似,是現(xiàn)實(shí)的簡(jiǎn)單化或理想化。
Essentially,allmodelsarewrong,butsomeareuseful.——GeorgeBox.“有用的”模型能抓住并凸顯現(xiàn)象中與分析目的最相關(guān)之主要特征,因此統(tǒng)計(jì)分析的成功與對(duì)主題領(lǐng)域的了解密切相關(guān)。統(tǒng)計(jì)分析的特點(diǎn)2.分析者應(yīng)根據(jù)目的來尋找合適的數(shù)據(jù)和分析方法。數(shù)據(jù):數(shù)據(jù)的來源;數(shù)據(jù)的真實(shí)性;數(shù)據(jù)所含信息;數(shù)據(jù)是否適合分析。方法:同一個(gè)問題,可采用多種分析方法,也可能需要多種方法。統(tǒng)計(jì)分析的特點(diǎn)3.統(tǒng)計(jì)分析是一個(gè)學(xué)習(xí)與實(shí)踐的過程統(tǒng)計(jì)學(xué):統(tǒng)計(jì)學(xué)基礎(chǔ)、多元統(tǒng)計(jì)分析、非參數(shù)統(tǒng)計(jì)、貝葉斯統(tǒng)計(jì)計(jì)量經(jīng)濟(jì)學(xué):時(shí)間序列、面板數(shù)據(jù)、微觀計(jì)量、非參數(shù)時(shí)間序列分析:一元、多元、波動(dòng)分析、非線性專業(yè)領(lǐng)域背景知識(shí)有關(guān)軟件:Matlab、R、SPSS、SAS、Python從統(tǒng)計(jì)認(rèn)識(shí)過程而言,充分體現(xiàn)著定性分析和定量分析對(duì)立統(tǒng)一的關(guān)系。定量分析研究是統(tǒng)計(jì)研究的特色所在,但統(tǒng)計(jì)的定量分析不是純粹數(shù)量意義的,即不是就數(shù)量論數(shù)量,而是基于所研究事物本身的特點(diǎn),并且從所研究事物的有關(guān)聯(lián)系或現(xiàn)實(shí)背景中,緊緊扣住認(rèn)識(shí)所研究事物內(nèi)在本質(zhì)這一主題來展開的,注重的是定量分析背后的具體含義和意義,這也正是統(tǒng)計(jì)學(xué)與數(shù)學(xué)的區(qū)別所在。
統(tǒng)計(jì)分析的特點(diǎn)那么統(tǒng)計(jì)研究怎樣才能通過數(shù)量來體現(xiàn)其具體含義與現(xiàn)實(shí)意義?這就必須結(jié)合定性分析,即以定性分析為起點(diǎn),并以定性分析為終點(diǎn)。具體來說,統(tǒng)計(jì)研究總是按照“初步(感性)的定性認(rèn)識(shí)——客觀科學(xué)的定量認(rèn)識(shí)——高級(jí)(理性)的定性認(rèn)識(shí)”這一過程來進(jìn)行的。統(tǒng)計(jì)分析的特點(diǎn)1.2現(xiàn)有統(tǒng)計(jì)軟件簡(jiǎn)介統(tǒng)計(jì)軟件的種類很多。有些功能齊全,有些價(jià)格便宜;有些容易操作,有些需要更多的實(shí)踐才能掌握。還有些是專門的軟件,只處理某一類統(tǒng)計(jì)問題。網(wǎng)上可以獲得的統(tǒng)計(jì)或者計(jì)量軟件起碼有多達(dá)幾百種。面對(duì)太多的選擇往往給決策帶來困難。這里介紹最常見的幾種。SPSS、EXCEL、SAS、Eviews、R語言、Matlab、Python,……統(tǒng)計(jì)軟件的種類很多。差異較大:
功能是否齊全?
價(jià)格是否便宜?是否開源?
是否容易操作?
軟件是否太大?
是否專門性軟件?只處理某一類統(tǒng)計(jì)問題。 面對(duì)太多的選擇往往給決策帶來困難。這里介紹最常見的幾種。1.2現(xiàn)有統(tǒng)計(jì)軟件簡(jiǎn)介統(tǒng)計(jì)軟件——Excel
嚴(yán)格說來并不是統(tǒng)計(jì)軟件,但作為數(shù)據(jù)表格軟件,必然有一定統(tǒng)計(jì)計(jì)算功能。而且凡是有MicrosoftOffice的計(jì)算機(jī),基本上都裝有Excel。注意:有時(shí)在裝Office時(shí)沒有裝數(shù)據(jù)分析的功能,那就必須裝了才行。當(dāng)然,畫圖功能是都具備的。對(duì)于簡(jiǎn)單分析,Excel還算方便,但隨著問題的深入,Excel就不那么“傻瓜”,需要使用函數(shù),甚至根本沒有相應(yīng)的方法了。統(tǒng)計(jì)軟件——Excel
SPSS是軟件英文名稱的首字母縮寫,原意為StatisticalPackagefortheSocialSciences,即“社會(huì)科學(xué)統(tǒng)計(jì)軟件包”。但是隨著SPSS產(chǎn)品服務(wù)領(lǐng)域的擴(kuò)大和服務(wù)深度的增加,SPSS公司已于2000年正式將英文全稱更改為StatisticalProductandServiceSolutions,意為“統(tǒng)計(jì)產(chǎn)品與服務(wù)解決方案”,標(biāo)志著SPSS的戰(zhàn)略方向正在做出重大調(diào)整。
2009年
IBM
收購了
SPSS
公司統(tǒng)計(jì)軟件——SPSS操作簡(jiǎn)便:界面非常友好,除了數(shù)據(jù)錄入及部分命令程序等少數(shù)輸入工作需要鍵盤鍵入外,大多數(shù)操作可通過鼠標(biāo)拖曳、點(diǎn)擊“菜單”、“按鈕”和“對(duì)話框”來完成。編程方便:具有第四代語言的特點(diǎn),告訴系統(tǒng)要做什么,無需告訴怎樣做。只要了解統(tǒng)計(jì)分析的原理,不需通曉統(tǒng)計(jì)方法的各種算法,即可得到需要的統(tǒng)計(jì)分析結(jié)果。功能強(qiáng)大:具有完整的數(shù)據(jù)輸入、編輯、統(tǒng)計(jì)分析、報(bào)表、圖形制作等功能。自帶11種類型136個(gè)函數(shù)。全面的數(shù)據(jù)接口:能夠讀取及輸出多種格式的文件。如*.dbf文件,文本數(shù)據(jù)文件,Excel的*.xls文件等均可轉(zhuǎn)換成可供分析的SPSS數(shù)據(jù)文件。能夠把SPSS的圖形轉(zhuǎn)換為7種圖形文件。結(jié)果可保存為*.txt,word,PPT及html格式的文件。統(tǒng)計(jì)軟件——SPSS統(tǒng)計(jì)軟件——SPSS統(tǒng)計(jì)軟件——SAS
功能非常齊全(不如R齊全)的軟件;盡管價(jià)格相當(dāng)不菲,許多公司,特別是美國制藥公司,還是因?yàn)槠涔δ鼙姸嗪湍承┟绹畽C(jī)構(gòu)(FDA)認(rèn)可而使用;盡管現(xiàn)在已經(jīng)盡量“傻瓜化”(遠(yuǎn)不如SPSS“傻”),但仍然需要一定的訓(xùn)練才可以進(jìn)入。可以對(duì)它編程;幫助系統(tǒng)很差,查尋不易;對(duì)于基本統(tǒng)計(jì)課程則不那么方便。統(tǒng)計(jì)軟件——SAS統(tǒng)計(jì)軟件——S-plus
這是R出現(xiàn)之前統(tǒng)計(jì)學(xué)家最喜愛的軟件;功能齊全;強(qiáng)大的編程功能,使得研究人員可以編制自己的程序來實(shí)現(xiàn)自己的理論和方法;目前正在進(jìn)行“傻瓜化”以爭(zhēng)取顧客。但仍然以編程方便為顧客所青睞。統(tǒng)計(jì)軟件——S-plus統(tǒng)計(jì)軟件——MATLAB
這也是應(yīng)用于各個(gè)領(lǐng)域的以編程為主的軟件,在理工領(lǐng)域應(yīng)用最廣泛。編程類似于S和R。但是統(tǒng)計(jì)方法不多。StatisticsToolbox—統(tǒng)計(jì)工具箱EconometricsToolbox-計(jì)量經(jīng)濟(jì)學(xué)工具箱統(tǒng)計(jì)軟件——MATLAB統(tǒng)計(jì)軟件——Python簡(jiǎn)介Python是一種面向?qū)ο?、直譯式計(jì)算機(jī)程序設(shè)計(jì)語言,由荷蘭人GuidovanRossum發(fā)明于1989年,1991年發(fā)行第一個(gè)公開發(fā)行版。它常被昵稱為膠水語言,它能夠很輕松的把用其他語言制作的各種模塊(尤其是C/C++)輕松地聯(lián)結(jié)在一起。
之所以選中Python(大蟒蛇的意思)作為程序的名字,是因?yàn)樗且粋€(gè)叫MontyPython的喜劇團(tuán)體的愛好者。Python是一種解釋型、高級(jí)和通用的編程語言,支持多種編程范型,包括結(jié)構(gòu)化、過程式、反射式、面向?qū)ο蠛秃瘮?shù)式編程。它擁有動(dòng)態(tài)類型系統(tǒng)和垃圾回收功能,能夠自動(dòng)管理內(nèi)存使用,并且其本身擁有一個(gè)巨大而廣泛的標(biāo)準(zhǔn)庫。除此之外,Python官方的第三方庫的倉庫PythonPackageIndex(PyPI,/)還包括數(shù)十萬個(gè)由第三方團(tuán)隊(duì)或個(gè)人開發(fā)的Python庫。統(tǒng)計(jì)軟件——Python簡(jiǎn)介Python2.0于2000年發(fā)布,Python3.0于2008年發(fā)布。需要注意的是,Python3.x是Python2.x的主要修訂版,兩者并不完全兼容。根據(jù)TIOBE編程語言排行榜最新數(shù)據(jù),Python是使用率排名第一的編程語言。統(tǒng)計(jì)軟件——Python簡(jiǎn)介
R免費(fèi),永遠(yuǎn)正版R資源公開(不是黑匣子)R可以在UNIX,Windows和MacosX上運(yùn)行R有優(yōu)秀的內(nèi)在幫助系統(tǒng)R有優(yōu)秀的畫圖功能學(xué)生能夠輕松地轉(zhuǎn)到商業(yè)支持的S-Plus程序(如果需要使用商業(yè)軟件)R語言有一個(gè)強(qiáng)大的,容易學(xué)習(xí)的語法,有許多內(nèi)在的統(tǒng)計(jì)函數(shù)統(tǒng)計(jì)軟件——R軟件其它統(tǒng)計(jì)軟件
Eviews:用于處理回歸和時(shí)間序列的經(jīng)濟(jì)類軟件Rats:專門處理時(shí)間序列數(shù)據(jù)Amos:結(jié)構(gòu)模型Nlogit:離散選擇模型和受限因變量模型Stata:面板數(shù)據(jù)模型功能很強(qiáng)大Gauss:運(yùn)算速度最快的計(jì)量經(jīng)濟(jì)學(xué)軟件。計(jì)量經(jīng)濟(jì)學(xué)大牛的最愛。FORTRAN:這是應(yīng)用于各個(gè)領(lǐng)域的歷史很長(zhǎng)的非常優(yōu)秀的數(shù)學(xué)編程軟件,功能強(qiáng)大,也有一定的統(tǒng)計(jì)軟件包。計(jì)算速度比這里介紹的都快得多。但需要編程和編譯。操作不那么容易。KDnuggets-數(shù)據(jù)分析師的工具軟件Kaggle-統(tǒng)計(jì)學(xué)家使用的分析軟件關(guān)于編程語言沒有最好的語言,只有最合適的語言;沒有糟糕的語言,只有糟糕的程序員;沒有一種語言是萬能的,只會(huì)一種語言是萬萬不能的;廢除對(duì)語言的宗教信仰,建立對(duì)語言的哲學(xué)思維;編程就是在人腦和電腦之間尋找最佳平衡點(diǎn)的過程。關(guān)于統(tǒng)計(jì)編程語言個(gè)人認(rèn)為統(tǒng)計(jì)分析最佳搭配:
R[統(tǒng)計(jì)分析]+Python[數(shù)據(jù)預(yù)處理]R語言的由來R語言是從S語言演變而來的。S語言是二十世紀(jì)70年代誕生于貝爾實(shí)驗(yàn)室,由RickBecker,JohnChambers,AllanWilks開發(fā)?;赟語言開發(fā)的商業(yè)軟件Splus,可以方便的編寫函數(shù)、建立模型,具有良好的擴(kuò)展性,取得了巨大成功。1995年由新西蘭Auckland大學(xué)統(tǒng)計(jì)系的RobertGentleman和RossIhaka,編寫了一種能執(zhí)行S語言的軟件,并將該軟件的源代碼全部公開,這就是R軟件,其命令統(tǒng)稱為R語言。1.3R下載、安裝及基本操作R軟件簡(jiǎn)介R是開源軟件,代碼全部公開,對(duì)所有人免費(fèi)。R可在多種操作系統(tǒng)下運(yùn)行,如Windows、MacOS、多種Linux和UNIX等。R需要輸入命令,可以編寫函數(shù)和腳本進(jìn)行批處理運(yùn)算,語法簡(jiǎn)單靈活。目前在R網(wǎng)站上約有20000多個(gè)程序包,涵蓋了基礎(chǔ)統(tǒng)計(jì)學(xué)、社會(huì)學(xué)、經(jīng)濟(jì)學(xué)、生態(tài)學(xué)、地理學(xué)、醫(yī)學(xué)統(tǒng)計(jì)學(xué)、生物信息學(xué)等諸多方面。通過用戶自編程序,R語言很容易延伸和擴(kuò)大。它就是這樣成長(zhǎng)的。R是計(jì)算機(jī)編程語言。對(duì)于熟練的編程者,可能會(huì)覺得該語言比其他語言更容易上手。而對(duì)計(jì)算機(jī)初學(xué)者,學(xué)習(xí)R語言使得學(xué)習(xí)下一步的其他編程不那么困難。那些傻瓜軟件(SAS,SPSS等)語言的語法則完全不同。R的優(yōu)點(diǎn)R的缺點(diǎn)沒有商業(yè)支持(但有網(wǎng)上支持);需要編程,不夠傻瓜;速度不如C++或FORTRAN下載和安裝RTheComprehensiveR
ArchiveNetwork簡(jiǎn)稱CRAN,提供下載安裝程序和相應(yīng)軟件包。R主頁/
Windows版本下載地址之一:/mirrors.html下載完成后,雙擊/CRAN/bin/windows/base/R-3.5.1-win.exe
開始安裝。一直點(diǎn)擊下一步,各選項(xiàng)默認(rèn)。圖1R軟件首頁/
R登陸界面(Windows版)菜單欄快捷按鈕控制臺(tái)命令行R程序包為什么要安裝程序包?特定的分析功能,需要用相應(yīng)的程序包實(shí)現(xiàn)。例如:時(shí)間序列分析,往往要用到TSA程序包,多元正態(tài)分布mvtnorm包等等。程序包是什么?
R程序包是多個(gè)函數(shù)的集合,具有詳細(xì)的說明和示例。Window下的R程序包是已經(jīng)編譯好的zip包。每個(gè)程序包包含R函數(shù)、數(shù)據(jù)、幫助文件、描述文件等。常用的R包常用R程序包base-R基礎(chǔ)功能包stats-R統(tǒng)計(jì)學(xué)包nlme-線性及非線性混合效應(yīng)模型Graphics-繪圖lattice-柵格圖TSA-
時(shí)間序列分析mvtnorm-多元正態(tài)分布分析truncnorm-截尾正態(tài)分布cluster-聚類分析TSA包頁面R程序包在CRAN提供了每個(gè)包的源代碼和編譯好的MacOS、Window下的程序包以TSA包為例,CRAN提供了:Packagesource:TSA_1.01.tar.gzMacOSXbinary:TSA_1.01.tgzWindowsbinary:TSA_1.01.zip
Referencemanual:TSA.pdf
等Window平臺(tái)下程序包為zip文件,安裝時(shí)不要解壓。R程序包安裝1連網(wǎng)時(shí),用函數(shù)install.packages(),選擇鏡像后,程序?qū)⒆詣?dòng)下載并安裝程序包。例如:打開RGui,在控制臺(tái)中輸入
install.packages(“TSA")2安裝本地zip包路徑:Packages>installpackagesfromlocalfiles選擇光盤或者本地磁盤上存儲(chǔ)zip包的文件夾。非CRAN-R程序包安裝3.知道源代碼網(wǎng)址用函數(shù)install.packages(),install.packages("http://www.lepem.ufc.br/jaa/colorout_1.1-0.tar.gz",repos=NULL)install.packages("/hadley/devtools/archive/v1.7.0.tar.gz",repos=NULL,method="libcurl")#httpsisbuiltinvialibcurl.4.github安裝包可以用devtools
library(devtools);install_github("author/package")5.bioconductor安裝包可以用BiocManager
BiocManager::install("Biobase")程序包使用在控制臺(tái)中輸入如下命令:library(TSA)查看幫助文件如何知道TSA程序包內(nèi)部都有哪些函數(shù)?最常用的方法:1輸入命令??TSA2查看pdf幫助文檔(從程序包下載頁面下載)幫助文件的內(nèi)容以lm函數(shù)為例:?lmCRANtask
Views
是一個(gè)由R語言社區(qū)成員提供的按功能分類的R包合集,如貝葉斯、時(shí)間序列、生存分析等。RTaskViewsRTaskViews如果你想快速安裝某個(gè)類型的R包合集可以用下面的命令(ctv包為必須):#Toautomaticallyinstalltheseviews,thectvpackageneedstobeinstalled,e.g.,via
install.packages("ctv")library("ctv")#andthentheviewscanbeinstalledviainstall.viewsorupdate.views(whichfirstassesseswhichofthepackagesarealreadyinstalledandup-to-date),e.g.,install.views("Econometrics")#or
update.views("Econometrics")
RstudioRstudio是Rstudio(Posit)公司開發(fā)的R語言集成開發(fā)環(huán)境(IDE),在基于窗口的R編程中別廣泛的使用,相對(duì)于R自帶的GUI界面而已具有更加友好的界面、更好的項(xiàng)目管理功能、package管理功能、圖片預(yù)覽功能等。RStudio工具下載:/products/rstudio/download/Rstudio性能:MRO引入“IntelMKLforparallelmathematicalcomputing”發(fā)揮多核處理器的性能,提高了R的運(yùn)行速度??芍貜?fù)性:MRO引入了checkpoint包,每天對(duì)R包(CRAN)進(jìn)行鏡像,這樣當(dāng)用戶設(shè)置時(shí)間之后,安裝使用這一天的R包,腳本運(yùn)行的結(jié)果應(yīng)該是一致的。MicrosoftROpen官網(wǎng):/open和對(duì)應(yīng)版本R完全兼容,更新比官方R發(fā)行版要慢,Mac版更慢MicrosoftROpenMarkdownMarkdown是一種輕量級(jí)標(biāo)記語言,純文本格式編寫文檔,可與HTML混編,可導(dǎo)出HTML、Word、PDF格式的文件,是RStudio內(nèi)置的幫助文件的主要格式。RMarkdown則是通過R語言制作的Markdown格式的文件,其中包含嵌入的R語言代碼。通過RMarkdown編寫的文檔,簡(jiǎn)潔、高效、易讀、易寫,所有作業(yè)及作業(yè)要求用:RMarkdown格式MarkdownRMarkdown文檔編輯需要安裝rmarkdown包RMarkdown代碼及編譯結(jié)果在Windows和Mac上安裝和運(yùn)行Python的方法比較簡(jiǎn)單,從Python的官網(wǎng)(/downloads/)下載最新版本的Python,運(yùn)行安裝程序文件并按照步驟安裝即可。在安裝過程中,最好選中將Python添加到環(huán)境變量,這會(huì)將Python添加到環(huán)境變量中,保證可從計(jì)算機(jī)的任何路徑運(yùn)行Python。1.4Python下載、安裝及運(yùn)行
Anaconda安裝Anaconda集成環(huán)境其中AnacondaNavigator提供了常用Python及開發(fā)軟件的導(dǎo)航,AnacondaPowershellPrompt和AnacondaPrompt提供了命令行界面,JupyterNotebook是符合Markdown格式的Python筆記本,Spyder則是免費(fèi)集成開發(fā)環(huán)境。R和Python部分參考書RinActionBy-RobertL.KabacoffRforDataSciencehttps://r4ds.had.co.nz/DataVisualizationhttps://socviz.co/EfficientRprogramming https://csgillespie.github.io/efficientR/AdvancedR
https://adv-r.hadley.nz/index.htmlPythonCookbook
https://python3-cookbook.readthedocs.io/zh_CN/latest/
引言統(tǒng)計(jì)分析軟件簡(jiǎn)介Excel、SPSS、SAS、Matlab,S-plusPython、RPython語言簡(jiǎn)介下載和安裝PythonAnaconda運(yùn)行PythonR語言簡(jiǎn)介下載和安裝RRstudioMarkdown常用的R包R包和R包合集的安裝R包的使用、更新、遷移本章小結(jié)2.1HelloWorld!2.2R語言運(yùn)行2.3R語言變量和常量2.4R語言對(duì)象基本操作2.5R語言數(shù)據(jù)類型2.6R語言流程控制2.7R語言自定義函數(shù)第2章
R語言編程基礎(chǔ)R語言基礎(chǔ)R語言變量和常量R語言數(shù)據(jù)對(duì)象變量、向量、數(shù)組、矩陣、數(shù)據(jù)框、列表控制、循環(huán)if\switch條件語句for\while\repeat循環(huán)語句R語言自定義函數(shù)R語言運(yùn)行2.1R的HelloWorld>newstr<-"Hello,World!">print(newstr)
[1]"Hello,World!"
>#myfirstRcode提示符注釋賦值2.2R語言運(yùn)行當(dāng)R啟動(dòng)時(shí),以下常用packages自動(dòng)加載:–base:基本函式(IO,敘述統(tǒng)計(jì),etc.)–stats:常用統(tǒng)計(jì)分析(t.test,anova,etc.)–methods:定義classesofobjects–utils:基本程序編寫工具–graphics:基本繪圖工具–grDevices:基本繪圖接口–datasets:數(shù)據(jù)范例編寫程序:「文件」「建立新的程序腳本」或直接于「>」后編寫空一行或用分號(hào)「;」將指令分開套用已寫好的程序:「文件」「開啟程序腳本」修改或繼續(xù)編寫程序:「文件」「開啟程序腳本」程序包(package)加載:「程序包」「加載程序包」清理窗口:右鍵「清除窗口」「←」、「→」或「=」表輸入前面已執(zhí)行完的指令:「↑」逐一顯示+:程序未完結(jié)就換行會(huì)顯示「+」提醒,欲結(jié)束按「Esc」英文字母大小寫視為不同的符號(hào)#井字號(hào)之后為批注,程序不會(huì)執(zhí)行結(jié)束R程序:直接關(guān)閉或指令「q()」ls()列出工作空間中的對(duì)象rm()刪除工作空間中的對(duì)象rm(list=ls())刪除空間中所有對(duì)象save.image()保存工作鏡像sink()將運(yùn)行結(jié)果保存到指定文件中g(shù)etwd()顯示當(dāng)前工作文件夾setwd()設(shè)定工作文件夾R語言腳本是一系列命令可以先批量的編好程序,或者對(duì)別人已經(jīng)編好的程序進(jìn)行修改。之后輸入到控制臺(tái)進(jìn)行調(diào)試,以滿足數(shù)據(jù)分析的需求語言高亮顯示在代碼較多的情況下,有時(shí)需要對(duì)行數(shù)、函數(shù)、括號(hào)、函數(shù)選項(xiàng)等進(jìn)行高亮顯示,設(shè)置成不同的顏色,以減少錯(cuò)誤腳本編輯器R自帶的腳本編輯器RStudio自帶的腳本編輯器Editplus(
)Ultraedit(/)Emacs(/software/emacs/)Notepad++(/)記事本或?qū)懽职宓鹊纫粋€(gè)R語言腳本rate<-c(20,22,24,26,28,30,32,34,36,38,40,42)impurity<-c(8.4,9.5,11.8,10.4,13.3,14.8,13.2,14.7,16.4,16.5,18.9,18.5)plot(impurity~rate)reg<-lm(impurity~rate)abline(reg,col="red")summary(reg)如何運(yùn)行R腳本程序通過source()函數(shù)運(yùn)行source(“d:/regression.r”)通過R腳本編輯器運(yùn)行路徑:RGui>File>OpenScript#Ctrl+R運(yùn)行直接粘貼到R控制臺(tái)ctrl+c,ctrl+v2.3R語言常量和變量常量是其值不變的量,包括1234,"abc"等數(shù)值、"rlang"等字符串和邏輯值等基本類型。其中,邏輯真值寫為T或TRUE(注意區(qū)分大小寫,寫t或true都沒意義),邏輯假值寫為F或FALSE。R中還有一些特殊類型的常量,其中NULL表示空值NA(NotAvailable的意思)表示缺失數(shù)據(jù)Inf和-Inf表示正無窮和負(fù)無窮NaN(NotaNumber的意思)表示不是數(shù)字的值變量是其值可變的量,如x<-3,x就是一個(gè)變量,當(dāng)x<-4時(shí),x的值被重新賦值為4。變量名由字母、數(shù)字和下劃線組成,變量的第一個(gè)字符為字母。R語言變量命名的大原則是:只有字母(區(qū)分大小寫)、數(shù)字、“_”(下劃線)、“.”(英文句號(hào))可以出現(xiàn)。變量長(zhǎng)度沒有限制,但不能有中文、空格、連字符”-“的存在。變量命名還要滿足以下條件:不能以數(shù)字或下劃線開頭開頭必須是英文字母或者點(diǎn)可以以點(diǎn)號(hào)開頭,但點(diǎn)號(hào)后面的符號(hào)不能是數(shù)字符號(hào)說明 1)> 命令或運(yùn)算提示符 2)+ 續(xù)行符 3)# 注釋、說明語句字符賦值符號(hào) 1)<- 2)=R語言常見運(yùn)算符+ 加號(hào)- 減號(hào)* 乘號(hào)
除號(hào)%%取模%/%整除^ 乘方運(yùn)算優(yōu)先級(jí)別遞增+-*/%%,%/%^TRUE==1;FALSE==0基本算術(shù)運(yùn)算> 大于< 小于>= 大于等于 <= 小于等于== 等于!= 不等于
比較運(yùn)算得到的結(jié)果是邏輯常量TRUE(真)和FALSE(假)。比較運(yùn)算符!x 邏輯非當(dāng)前邏輯值取反運(yùn)算。x&y邏輯與如果兩個(gè)表達(dá)式的值均為TRUE,結(jié)果才為TRUE,否則為FALSE。x&&y邏輯與
若x,y為向量只比較第一個(gè)元素。x|y邏輯或如果x和y的值均為FALSE,結(jié)果為FALSE,否則為TRUE。向量對(duì)每個(gè)元素進(jìn)行比較。x||y邏輯或若x和y為向量只比較第一個(gè)元素。xor(x,y)異或兩個(gè)邏輯值不相同,則異或結(jié)果為真。反之,為假。邏輯運(yùn)算符思考題
下列()表示的是變量。A.123 B.TRUE C.Inf D.abc下列()不可以作為變量名。A.1a2b B.a1b2 C.a_b D.a.b下列()可以作為變量名。A.TRUE B.Inf C.True D.NaN下列賦值語句錯(cuò)誤的是()。A.a<-1 B.a=1 C.1=a D.A_1<-”1”R語言是基于對(duì)象(Object)的語言基本的數(shù)據(jù)類型有:向量、矩陣、列表等復(fù)雜的數(shù)據(jù)對(duì)象有:數(shù)據(jù)框?qū)ο螅瑫r(shí)間序列對(duì)象,模型對(duì)象,圖形對(duì)象,等等。這里先介紹下R中數(shù)據(jù)對(duì)象的基本屬性和有關(guān)操作。2.4R語言對(duì)象基本操作
對(duì)象和它的模式與屬性R是一種基于對(duì)象的語言,R的對(duì)象包括了若干元素作為其數(shù)據(jù),另外,還可以有一些特殊數(shù)據(jù)稱為屬性(attribute),并規(guī)定了一些特定的操作(如打印、繪圖);R對(duì)象分為:?jiǎn)渭儗?duì)象、復(fù)合對(duì)象單純對(duì)象:所有元素都是一種基本類型,復(fù)合對(duì)象的元素可以是不同類型的對(duì)象;固有屬性:mode和lengthR對(duì)象都有兩個(gè)基本的屬性:mode(類型)屬性和length(長(zhǎng)度)屬性,比如向量的類型為logical(邏輯型)、numeric(數(shù)值型)、complex(復(fù)數(shù)型)、character(字符型),比如:mode(c(1,3,5)>5)R對(duì)象有一種特別的null(空值型)型,只有一個(gè)特殊的NULL值為這種類型,表示沒有值(不同于NA,NA是一種特殊值,而NULL根本沒有對(duì)象值)attributes()和attr()函數(shù)attributes(object)返回對(duì)象object的各特殊屬性組成的列表,不包括固有屬性mode和length.例如:x<-c(apple=2.5,orange=2.1);xattributes(x)可以用attr(object,name)的形式存取對(duì)象object的名為name的屬性,例如,>attr(x,"names")[1]"apple""orange“也可以把a(bǔ)ttr()函數(shù)寫作賦值的左邊以改變屬性值或定義新的屬性,例如,對(duì)象的class屬性在R中可以用特殊的class屬性來支持面向?qū)ο蟮木幊田L(fēng)格,對(duì)象的class屬性用來區(qū)分對(duì)象的類,可以寫出通用函數(shù)根據(jù)對(duì)象類的不同進(jìn)行不同的操作,比如,print()函數(shù)對(duì)于向量和矩陣的顯示方法就不同,plot()函數(shù)對(duì)不同類的自變量作不同的圖形。為了暫時(shí)去掉一個(gè)有類的對(duì)象的class屬性,可以使用unclass(object)函數(shù)。對(duì)于簡(jiǎn)單向量來說,class函數(shù)返回的結(jié)果和mode()函數(shù)一致,但對(duì)于矩陣、數(shù)組、數(shù)據(jù)框等數(shù)據(jù)對(duì)象,結(jié)果有可能相同,也有可能不同。A<-"Gomphotherium";class(A);##[1]"character"class(c(1,3,5)>5)##[1]"logicald<-data.frame(V1=c(1,2))mode(d)##[1]"list"class(d)##[1]"data.frame"class()函數(shù)是從面向?qū)ο笳Z言的角度返回對(duì)象的抽象類,一個(gè)數(shù)據(jù)對(duì)象可能有多個(gè)類,用戶可以自行定義類。mode()函數(shù)返回的是內(nèi)存中數(shù)據(jù)對(duì)象的基本類型,一個(gè)數(shù)據(jù)對(duì)象只能有一個(gè)基本數(shù)據(jù)類型(numeric、complex、character、logical、list、function等),用戶無法自行定義。要判斷某對(duì)象是否某類型,有許多個(gè)類似于is.numeric()的函數(shù)可以完成.-is.numeric(x)用來檢驗(yàn)對(duì)象x是否為數(shù)值型,它返回一個(gè)邏輯型結(jié)果.-is.character()可以檢驗(yàn)對(duì)象是否為字符型,等等.如:z<-0:9is.numeric(z)is.character(z)R可以強(qiáng)制進(jìn)行類型轉(zhuǎn)換,例如digits<-as.character(123);digitsd<-as.numeric(digits);d
列出對(duì)象與刪除對(duì)象
函數(shù)ls()的功能是顯示所有在內(nèi)存中的對(duì)象。要在內(nèi)存中刪除某個(gè)對(duì)象,可利用函數(shù)rm()。rm(list=ls())#刪除內(nèi)存中的所有對(duì)象name<-"Carmen"n1<-10n2<-100m<-0.5ls()##[1]"m""n1""n2""name"2.5
R語言數(shù)據(jù)類型
向量是有相同基本類型的元素序列,即一維數(shù)組定義向量的最常用辦法是使用函數(shù)c(),它把若干個(gè)數(shù)值或字符串組合為一個(gè)向量,比如:>x=c(1:3,10:13)>x[1]12310111213R中用符號(hào)“<-”、“=”來為變量賦值。另一種賦值的辦法是用assign函數(shù),比如>x1=c(1,2)和
>assign(“x1”,c(1,2))相同向量(Vector)與賦值數(shù)值型向量運(yùn)算可以對(duì)向量進(jìn)行加(+)減(-)乘(*)除(/)、乘方(^)運(yùn)算,其含意是對(duì)向量的每一個(gè)元素進(jìn)行運(yùn)算。例如:
>x<-c(1,4,6.25)>y=x*2+1>y[1]3.09.013.5%/%表示整數(shù)除法(比如5%/%3為1),
%%表示求余數(shù)(如5%%3為2)??梢杂孟蛄孔鳛楹瘮?shù)自變量,
sqrt、log、exp、sin、cos、tan等函數(shù)都可以用向量作自變量,結(jié)果是對(duì)向量的每一個(gè)元素取相應(yīng)的函數(shù)值函數(shù)min和max分別取向量自變量的最小值和最大值,函數(shù)sum計(jì)算向量自變量的元素和,函數(shù)mean計(jì)算均值,函數(shù)var計(jì)算樣本方差(分母為n-1),函數(shù)sd計(jì)算標(biāo)準(zhǔn)差如果求var(x)而x是矩陣,則結(jié)果為樣本協(xié)方差陣。(行向量為觀測(cè)值)任何數(shù)與缺失值的運(yùn)算結(jié)果仍為缺失值。例如,>2*c(1,NA,2)[1]2NA4>sum(c(1,NA,2))[1]NA產(chǎn)生有規(guī)律的數(shù)列在R中很容易產(chǎn)生一個(gè)等差數(shù)列。例如,1:n產(chǎn)生從1到n的整數(shù)列,
-2:3產(chǎn)生從-2到3的整數(shù)列,
5:2產(chǎn)生反向的數(shù)列:注意1:n-1不是代表1到n-1而是向量1:n減去1,>n=5;>1:n-1[1]01234>1:(n-1)[1]1234seq函數(shù)是更一般的等差數(shù)列函數(shù)。如只指定一個(gè)自變量n>0,則seq(n)相當(dāng)于1:n。指定兩個(gè)自變量時(shí),第一量是開始值,第二量是結(jié)束值,如seq(-2,3)是從-2到3,默認(rèn)公差為1。R函數(shù)調(diào)用的一個(gè)很好的特點(diǎn)是它可以使用不同個(gè)數(shù)的自變量,函數(shù)可以對(duì)不同類型的自變量給出不同結(jié)果,自變量可以用“自變量名=自變量值”的形式指定。例如,seq(-2,3)可以寫成seq(from=-2,to=3)??梢杂靡粋€(gè)by參數(shù)指定等差數(shù)列的增加值,例如:>seq(0,2,0.7)[1]0.00.71.4
也可以寫成seq(from=0,to=2,by=0.7)。有參數(shù)名的參數(shù)的次序任意,如:
>seq(0,by=0.7,to=2)[1]0.00.71.4可以用length參數(shù)指定數(shù)列長(zhǎng)度,如seq(from=10,length=5)產(chǎn)生10到14。seq函數(shù)還可以用一種seq(along=向量名)的格式,這時(shí)只能用這一個(gè)參數(shù),產(chǎn)生該向量的下標(biāo)序列,如:
>x[1]1.004.006.25>seq(along=x)[1]123另一個(gè)類似的函數(shù)是rep,它可以重復(fù)第一個(gè)自變量若干次,例如:
>rep(x,3)[1]1.004.006.251.004.006.251.004.006.25
第一個(gè)參數(shù)名為x,第二個(gè)參數(shù)名為times(重復(fù)次數(shù))。此外numeric(n)可以產(chǎn)生一個(gè)長(zhǎng)度為n的零向量
邏輯向量向量可以取邏輯值,如:
>l=c(T,T,F)>l輸出[1]TRUETRUEFALSE
當(dāng)然,邏輯向量往往是一個(gè)比較的結(jié)果,如:
>x輸出[1]1.004.006.25>l=x>3>l輸出[1]FALSETRUETRUE一個(gè)向量與常量比較大小,結(jié)果還是一個(gè)向量,元素為每一對(duì)比較的結(jié)果邏輯值。兩個(gè)向量也可以比較,如:>log(10*x)[1]2.3025853.6888794.135167>log(10*x)>x輸出[1]TRUEFALSEFALSE
比較運(yùn)算符包括<,<=,>,>=,==,!=。邏輯向量?jī)蓚€(gè)邏輯向量可以進(jìn)行與(&)、或(|)運(yùn)算,結(jié)果是對(duì)應(yīng)元素運(yùn)算的結(jié)果。對(duì)邏輯向量x計(jì)算!x表示取每個(gè)元素的非。例如:>x=c(1,4,6.25,1.6)>(x>1.5)&(x<3)[1]FALSEFALSEFALSETRUE注意和(x>1.5)&&(x<3)的區(qū)別判斷一個(gè)邏輯向量是否都為真值的函數(shù)是all,如:>all(log(10*x)>x)[1]FALSE判斷是否其中有真值的函數(shù)是any,如:
>any(log(10*x)>x)[1]TRUE邏輯向量
函數(shù)is.na(x)用來判斷x的每一個(gè)元素是否缺失。如>is.na(c(1,NA,3))[1]FALSETRUEFALSE邏輯值可以強(qiáng)制轉(zhuǎn)換為整數(shù)值,TRUE變成1,F(xiàn)ALSE變成0。例如,age>65為老年人,否則為年輕人,可以用c(“young”,“old”)[(age>65)+1]表示。當(dāng)年齡大于65時(shí)age>65等于TRUE,加1則把TRUE轉(zhuǎn)換為數(shù)值型的1,結(jié)果得2,于是返回第二個(gè)下標(biāo)處的“old”。否則等于0+1下標(biāo)處的“young”。age=c(89,20,10,66);c('young','old')[(age>65)+1];[1]"old""young""young""old"字符型向量向量元素可以取字符串值。例如:
>c1=c("x","sin(x)")>c1輸出[1]"x""sin(x)">ns=c("Weight","Height","年齡")>ns輸出[1]"Weight""Height""年齡"paste函數(shù)用來把它的自變量連成一個(gè)字符串,中間用空格分開,例如:>paste("My","Job")[1]"MyJob">paste('Hi','早')輸出[1]"Hi早"連接的自變量可以是向量,這時(shí)各對(duì)應(yīng)元素連接起來,長(zhǎng)度不相同時(shí)較短的向量被重復(fù)使用。自變量可以是數(shù)值向量,連接時(shí)自動(dòng)轉(zhuǎn)換成適當(dāng)?shù)淖址硎?,例如?gt;paste(c("X","Y"),"=",1:4)[1]"X=1""Y=2""X=3""Y=4"分隔用的字符可以用sep參數(shù)指定,例:
>paste('result.',1:5,sep="")[1]"result.1""result.2""result.3""result.4""result.5"如果給paste()函數(shù)指定了collapse參數(shù),則把字符串向量的各個(gè)元素連接成一個(gè)字符串,中間用collapse指定的值分隔。比如
>paste(c('a','b'),collapse='.')得到'a.b'。兩個(gè)或者更多字符串對(duì)象根據(jù)元素對(duì)應(yīng)關(guān)系拼接一個(gè)字符串內(nèi)部元素如何連接復(fù)數(shù)向量R支持復(fù)數(shù)運(yùn)算。復(fù)數(shù)常量只要用3.5+2.1i這樣的格式即可。復(fù)向量的每一個(gè)元素都是復(fù)數(shù)。可以用complex()函數(shù)生成復(fù)向量(見幫助)。
>mydat=complex(real=3.5,imaginary=2.1)>mydat[1]3.5+2.1iRe()計(jì)算實(shí)部,Im()計(jì)算虛部,>Re(mydat)>[1]3.5
>Im(mydat)>[1]2.1
Mod()計(jì)算復(fù)數(shù)模,Arg()計(jì)算復(fù)數(shù)幅角。>Mod(mydat)[1]4.081666因子向量統(tǒng)計(jì)中的變量重要類別:區(qū)間變量和名義變量、有序變量。區(qū)間變量取連續(xù)的數(shù)值,可以進(jìn)行求和、平均等運(yùn)算。名義變量和有序變量取離散值,既可用數(shù)值表示也可取字符型值,其具體數(shù)值沒有數(shù)量意義,不能用于加減乘除計(jì)算而只能用來分類或者計(jì)數(shù)。名義變量比如性別、省份、職業(yè),有序變量比如班級(jí)名次、質(zhì)量等級(jí)等。因?yàn)殡x散變量有各種不同表示方法,在R中為統(tǒng)一起見使用因子(factor)來表示這種分類變量。還提供了有序因子(orderedfactor)來表示有序變量。因子是一種特殊的字符型向量,其中每一個(gè)元素取一組離散值中的一個(gè),而因子對(duì)象有一個(gè)特殊屬性levels表示這組離散值(用字符串表示)。例如:>x<-c("男","女","男","男","女")>y<-factor(x)>y[1]男女男男女
Levels:男女函數(shù)factor()用來把一個(gè)向量編碼成為一個(gè)因子。一般形式為:factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE)可以自行指定各離散取值水平(levels),不指定時(shí)由x的不同值來求得。labels可以用來指定各水平的標(biāo)簽,不指定時(shí)用各離散取值的對(duì)應(yīng)字符串。exclude參數(shù)用來指定要轉(zhuǎn)換為缺失值(NA)的元素值集合。如果指定了levels,則因子的第i個(gè)元素當(dāng)它等于水平中第j個(gè)時(shí)元素值取“j”,如果它的值沒有出現(xiàn)在levels中則對(duì)應(yīng)因子元素值取NA。ordered取真值時(shí)表示因子水平是有次序的(按編碼次序)??梢杂胕s.factor()檢驗(yàn)對(duì)象是否因子,用as.factor()把一個(gè)向量轉(zhuǎn)換成一個(gè)因子。>x=c(1,0,1,1,0)>y=factor(x,levels=sort(unique(x),decreasing=T),labels=c("男","女"),exclude=NA,order=F)>y[1]男女男男女
Levels:男女
>x=c(1,0,1,1,0,2)y=factor(x,levels=c(1,0),labels=c("男","女"),exclude=NA,order=F)>y[1]男女男男女<NA>Levels:男女因子的基本統(tǒng)計(jì)是頻數(shù)統(tǒng)計(jì),用函數(shù)table()來計(jì)數(shù)。例如,>sex=factor(c("男","女","男","男","女"))>res.tab<-table(sex)>res.tab
男女
32
表示男性3人,女性2人。table()的結(jié)果是一個(gè)帶元素名的向量,元素名為因子水平,元素值為該水平出現(xiàn)的頻數(shù)。R的結(jié)果除了可以顯示外,本身都是R對(duì)象(如這里的向量結(jié)果),可以很方便地進(jìn)一步處理。可以用兩個(gè)或多個(gè)因子進(jìn)行交叉分類。比如,性別(sex)和職業(yè)(job)交叉分組可以用table(sex,job)來統(tǒng)計(jì)每一交叉類的頻數(shù),結(jié)果為一個(gè)矩陣,矩陣帶有行名和列名,分別為兩個(gè)因子的各水平名。改變部分元素值的技術(shù)與邏輯值下標(biāo)方法結(jié)合可以定義向量的分段函數(shù)。例如:要定義y=f(x)為當(dāng)x<0時(shí)取1-x,否則取1+x,可以用:>x=c(-1,2,3,4,-3)>y=numeric(length(x))>y[x<0]=1-x[x<0]>y[x>=0]=1+x[x>=0]向量的分段函數(shù)要定義y=f(x)為當(dāng)x<3.0時(shí)取x,3.0=<x<3.5時(shí)取x+10,否則取x+20;x=c(0.5,-1,1,2,3,4,1,2,3,4);求y.x=c(0.5,-1,1,2,3,4,1,2,3,4);y=numeric(length(x));y[x<3]=x[x<3];y[(x>=3)&(x<3.5)]=x[(x>=3)&(x<3.5)]+10;y[x>3.5]=x[x>3.5]+20;x;y;思考題
下列()不能生成向量([1]54321)。5:1 B.6-1:5C.seq(1,5,by=-1) D.6-sequence(5)下列()不能生成向量([1]1234512345)。A.rep(1:5,2) B.sequence(rep(5,2))C.1:10%%6D.(0:9%%5)+1數(shù)組(array)是帶多個(gè)下標(biāo)的類型相同的元素的集合,常用的是數(shù)值型的數(shù)組如矩陣,也可以有其它類型(如字符型、邏輯型、復(fù)型數(shù)組)。數(shù)組有一個(gè)特征屬性叫做維數(shù)向量(dim屬性),比如維數(shù)向量有兩個(gè)元素時(shí)數(shù)組為二維數(shù)組(矩陣)。維數(shù)向量的每一個(gè)元素指定了該下標(biāo)的上界,下標(biāo)的下界總為1。數(shù)組(array)一組值只有定義了維數(shù)向量(dim屬性)后才能被看作是數(shù)組。比如:
>a=1:24>dim(a)=c(2,3,4)>a
數(shù)組元素的排列次序缺省情況下是采用FORTRAN的數(shù)組元素次序(按列次序),即第一下標(biāo)變化最快,最后下標(biāo)變化最慢,這里a的各元素次序?yàn)閍[1,1,1],a[2,1,1],a[1,2,1],a[2,2,1],a[1,3,1],...,a[2,3,4]。數(shù)組(array)用函數(shù)array()可以更直觀地定義數(shù)組。array()函數(shù)的完全使用為array(x,dim=length(x),dimnames=NULL),其中x是第一自變量,應(yīng)該是一個(gè)向量,表示數(shù)組的元素值組成的向量。dim參數(shù)可省,省略時(shí)作為一維數(shù)組(但不同于向量)。dimnames屬性可以省略,不省略時(shí)是一個(gè)長(zhǎng)度與維數(shù)相同的列表。a=array(c(1:24),dim=c(2,3,4),dimnames=NULL)數(shù)組下標(biāo)訪問數(shù)組的某個(gè)元素,寫出數(shù)組名和方括號(hào)內(nèi)用逗號(hào)分開的下標(biāo)即可,如a[2,1,2]。在每一個(gè)下標(biāo)位置寫一個(gè)下標(biāo)向量,表示對(duì)這一維取出所有指定下標(biāo)的元素,如a[1,2:3,2:3]取出所有第一下標(biāo)為1,第二下標(biāo)為2或3,第三下標(biāo)為2或3的元素。略寫某一維的下標(biāo),則表示該維全選。a[,,]或a[]都表示整個(gè)數(shù)組。a[]=0把元素都賦成0。
還有一種特殊下標(biāo)是對(duì)于數(shù)組只用一個(gè)下標(biāo)向量(是向量,不是數(shù)組),比如a[3:4],這時(shí)忽略數(shù)組的維數(shù)信息,把下標(biāo)表達(dá)式看作是對(duì)數(shù)組的數(shù)據(jù)向量取子集。函數(shù)matrix():二維數(shù)組,即矩陣。格式為matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
其中第一自變量data為數(shù)組的數(shù)據(jù)向量(缺省值為缺失值NA),nrow為行數(shù),ncol為列數(shù),byrow表示數(shù)據(jù)填入矩陣時(shí)按行次序還是列次序,缺省情況下按列次序。
dimnames缺省是空值,否則是一個(gè)長(zhǎng)度為2的列表,列表第一個(gè)成員是長(zhǎng)度與行數(shù)相等的字符型向量,表示每行的標(biāo)簽,列表第二個(gè)成員是長(zhǎng)度與列數(shù)相同的字符型向量,表示每列的標(biāo)簽。例如,定義一個(gè)3行4列,由1:12按行次序排列的矩陣,可以用:>b<-matrix(1:12,ncol=4,byrow=T)矩陣(matrix)>b<-matrix(1:12,ncol=4,byrow=T)>b[,1][,2][,3][,4][1,]1234[2,]5678[3,]9101112注意在有數(shù)據(jù)的情況下只需指定行數(shù)或列數(shù)之一。指定的數(shù)據(jù)個(gè)數(shù)允許少于所需的數(shù)據(jù)個(gè)數(shù),這時(shí)循環(huán)使用提供的數(shù)據(jù)。例如:>b<-matrix(0,nrow=3,ncol=4)生成3行4列的元素都為0的矩陣。矩陣是二維數(shù)組,應(yīng)用廣泛函數(shù)t(A)返回矩陣A的轉(zhuǎn)置。nrow(A)為矩陣A的行數(shù),ncol(A)為矩陣A的列數(shù)。矩陣之間進(jìn)行普通的加減乘除四則運(yùn)算,即數(shù)組的對(duì)應(yīng)元素之間進(jìn)行運(yùn)算,所以注意A*B不是矩陣乘法而是矩陣對(duì)應(yīng)元素相乘。要進(jìn)行矩陣乘法,使用運(yùn)算符%*%,A%*%B表示矩陣A乘以矩陣B(當(dāng)然要求A的列數(shù)等于B的行數(shù))。例如:>A<-matrix(1:12,nrow=4,ncol=3,byrow=T)>B<-matrix(c(1,0),nrow=3,ncol=2,byrow=T)>A%*%B另外,向量用在矩陣乘法中可以作為行向量看待也可以作為列向量看待,這要看哪一種觀點(diǎn)能夠進(jìn)行矩陣乘法運(yùn)算。例如,設(shè)x是一個(gè)長(zhǎng)度為n的向量,A是一個(gè)n*n矩陣,則“x%*%A%*%x”表示二次型。但是,有時(shí)向量在矩陣乘法中的地位并不清楚,比如“x%*%x”就既可能表示內(nèi)積,也可能表示n*n陣。因?yàn)榍罢咻^常用,所以R選擇表示前者,但內(nèi)積最好還是用crossprod(x)來計(jì)算。要表示n*n陣,可以用“cbind(x)%*%x”或“x%*%rbind(x)”。函數(shù)crossprod(X,Y)表示一般的交叉乘積(內(nèi)積),即X的每一列與Y的每一列的內(nèi)積組成的矩陣。如果X和Y都是向量則是一般的內(nèi)積。只寫一個(gè)參數(shù)X的crossprod(X)計(jì)算X自身的內(nèi)積。其它矩陣運(yùn)算還有solve(A,b)解線性方程組,solve(A)求方陣A的逆矩陣,svd()計(jì)算奇異值分解,qr()計(jì)算QR分解,eigen()計(jì)算特征向量和特征值。詳見隨機(jī)幫助,例如:>?qr函數(shù)diag()的作用依賴于其自變量。diag(vector)返回以自變量(向量)為主對(duì)角元素的對(duì)角矩陣。diag(matrix)返回由矩陣的主對(duì)角元素組成的向量。diag(k)(k為標(biāo)量)返回k階單位陣。>x=1:3>x[1]123>crossprod(x)[,1][1,]14>cbind(x)%*%x[,1][,2][,3][1,]123[2,]246[3,]369>x%*%rbind(x)[,1][,2][,3][1,]123[2,]246[3,]369>y=diag(x)>y[,1][,2][,3][1,]100[2,]020[3,]003>diag(y)[1]123>diag(3)[,1][,2][,3][1,]100[2,]010[3,]001數(shù)據(jù)框(data.frame)數(shù)據(jù)框是R中類似SAS數(shù)據(jù)集的一種數(shù)據(jù)結(jié)構(gòu)。它通常是矩陣形式的數(shù)據(jù),但矩陣各列可以是不同類型的。數(shù)據(jù)框每列是一個(gè)變量,每行是一個(gè)樣品的觀測(cè)值。數(shù)據(jù)框有更一般的定義。它是一種特殊的列表對(duì)象,有一個(gè)值為“data.frame”的class屬性,各列表成員必須是向量(數(shù)值型、字符型、邏輯型)、因子、數(shù)值型矩陣、列表,或其它數(shù)據(jù)框。向量、因子成員為數(shù)據(jù)框提供一個(gè)變量,如果向量非數(shù)值型則會(huì)被強(qiáng)制轉(zhuǎn)換為因子,而矩陣、列表、數(shù)據(jù)框這樣的成員為新數(shù)據(jù)框提供了和其列數(shù)、成員數(shù)、變量數(shù)相同個(gè)數(shù)的變量。作為數(shù)據(jù)框變量的向量、因子或矩陣必須具有相同的長(zhǎng)度(行數(shù))。盡管如此,我們一般還是可以把數(shù)據(jù)框看作是一種推廣了的矩陣,它可以用矩陣形式顯示,可以用對(duì)矩陣的下標(biāo)引用方法來引用其元素或子集。數(shù)據(jù)框數(shù)據(jù)框可以用data.frame()函數(shù)生成,其用法與list()函數(shù)相同,各自變量變成數(shù)據(jù)框的成分,自變量可以命名,成為變量名。例如:>d=data.frame(name=c("趙","錢","孫","李","王"),age=c(20,21,22,21,20),height=c(170,171,175,165,181),gender=c("男","女","男","女","男"))>d
如果一個(gè)列表的各個(gè)成分滿足數(shù)據(jù)框成分的要求,它可以用as.data.frame()函數(shù)強(qiáng)制轉(zhuǎn)換為數(shù)據(jù)框。比如,上面的d如果先用list()函數(shù)定義成了一個(gè)列表,就可以強(qiáng)制成為一個(gè)數(shù)據(jù)框。一個(gè)矩陣可以用data.frame()轉(zhuǎn)換為一個(gè)數(shù)據(jù)框,如果它原來有列名則其列名被作為數(shù)據(jù)框的變量名,否則系統(tǒng)自動(dòng)為矩陣的各列起一個(gè)變量名(如X1,X2)。>dnameageheightgender1趙20170男
2錢21171女
3孫22175男
4李21165女
5王20181男>d[1]name1趙
2錢
3孫
4李
5王>d[[1]][1]"趙""錢""孫""李""王“>d[[2]][2:3][1]2122數(shù)據(jù)框引用引用數(shù)據(jù)框元素的方法與引用矩陣元素的方法相同,可以使用下標(biāo)或下標(biāo)向量,也可以使用名字或名字向量。如d[1:2,2:3]。數(shù)據(jù)框的各變量也可以按列表引用(即用雙括號(hào)[[]]或$符號(hào)引用)。數(shù)據(jù)框的變量名由屬性names定義,此屬性一定是非空的。數(shù)據(jù)框的各行也可以定義名字,可以用rownames屬性定義。如:>names(d)[1]"name""age""height""gender">rownames(d)[1]"1""2""3""4""5"R語言的數(shù)據(jù)結(jié)構(gòu)矩陣:數(shù)據(jù)框:二維數(shù)據(jù)對(duì)象相同點(diǎn)不同點(diǎn)數(shù)據(jù)框二維行與列的意義不同:列表示變量;行表示觀測(cè)值。矩陣、二維數(shù)組行列意義相同思考題
下列說法錯(cuò)誤的是()。A.?dāng)?shù)據(jù)框和矩陣都是二維的。B.?dāng)?shù)據(jù)框的行與列意義不同,而矩陣的行與列只代表數(shù)據(jù)的位置。C.顯示數(shù)據(jù)框時(shí)左側(cè)會(huì)顯示觀測(cè)值的序號(hào),顯示矩陣時(shí)只顯示矩陣中的數(shù)據(jù)。D.可以用data.frame函數(shù)建立數(shù)據(jù)框,用matrix()函數(shù)建立矩陣。列表(list)定義列表(List)是R中最復(fù)雜的數(shù)據(jù)類型,一般來說,列表是數(shù)據(jù)對(duì)象的有序集合,但是,列表的各個(gè)元素(item)的數(shù)據(jù)類型可以不同,每個(gè)元素的長(zhǎng)度可以不同,是R中最靈活的數(shù)據(jù)類型。列表項(xiàng)可以是列表類型,因此,列表被認(rèn)為是遞歸變量,與之相對(duì),向量,數(shù)組,矩陣,數(shù)據(jù)框被認(rèn)為是原子變量。列表元素用“列表名[[下標(biāo)]]”的格式引用。但是,列表不同于向量,我們每次只能引用一個(gè)元素,如rec[[1:2]]的用法是不允許的。注意:“列表名[下標(biāo)]”或“列表名[下標(biāo)范圍]”的用法也是合法的,但其意義與用兩重括號(hào)的記法完全不同,兩重記號(hào)取出列表的一個(gè)元素,結(jié)果與該元素類型相同,如果使用一重括號(hào),則結(jié)果是列表的一個(gè)子列表(結(jié)果類型仍為列表)。>rec=list(name="李明",age=30,scores=c(85,76,90))>rec$name[1]"李明"$age[1]30$scores[1]857690>rec[1]$name[1]"李明">rec[[1]][1]"李明">rec[2]$age[1]30>rec[[2]][1]30
>rec[3]$scores[1]857690>rec[[3]][1]857690>rec[[3]][1:2][1]8576>mode(rec[1])>mode(rec[[1]])在定義列表時(shí)如果指定了元素的名字(如rec中的name,age,scores),則引用列表元素還可以用它的名字作為下標(biāo),格式為“列表名[["元素名"]]”,如:
>rec[["age"]][1]30另一種格式是“列表名$元素名”,如:
>rec$age[1]30
其中“元素名”可以簡(jiǎn)寫到與其它元素名能夠區(qū)分的最短程度,比如“rec$s”可以代表“rec$score”。這種寫法方便了交互運(yùn)行,編寫程序時(shí)一般不用簡(jiǎn)寫,以免降低程序的可讀性。使用元素名的引用方法可以讓我們不必記住某一個(gè)下標(biāo)代表那一個(gè)元素,而直接用易記的元素名來引用元素。事實(shí)上,已知向量和矩陣都可以指定元素名、行名、列名。定義列表使用list()函數(shù),每一個(gè)自變量變成列表的一個(gè)元素,自變量可以用“名字=值”的方式給出,即給出列表元素名。自變量的值被復(fù)制到列表元素中,自變量如果是變量并不會(huì)與該列表元素建立關(guān)系(改變?cè)摿斜碓夭粫?huì)改變自變量的值)。(例見后)修改列表列表的元素可以修改,只要把元素引用賦值即可。如:>rec$age<-45
甚至>rec$age<-list(19,29,31)(可以任意修改一個(gè)列表元素)。如果被賦值的元素原來不存在,則列表延伸以包含該新元素。例如,rec現(xiàn)在共有三個(gè)元素,我們定義一個(gè)新的命名元素,則列表長(zhǎng)度變?yōu)?,再定義第六號(hào)元素則列表長(zhǎng)度變?yōu)?(第5個(gè)元素自動(dòng)為NULL):
>rec$sex<-"男">rec[[6]]<-161>rec>rec$sex<-"男">rec[[6]]<-161>rec$name[1]"李明"$age[1]30$scores[1]857690$sex[1]"男"[[5]]NULL[[6]][1]161>sex<-"男">rec1<-list(sex,161)>rec1>rec1[[1]]="女">rec1>sex第五號(hào)元素因?yàn)闆]有定義所有其值是“NULL”,這是空對(duì)象的記號(hào)。如果rec是一個(gè)向量,則其空元素為“NA”,這是缺失值的記號(hào)。從這里我們也可以體會(huì)“NULL”與“NA”的區(qū)別。幾個(gè)列表可以用連接函數(shù)c()連接起來,結(jié)果仍為一個(gè)列表,其元素為各自變量的列表元素。如:>list.ABC<-c(list.A,list.B,list.C)(注意在R中句點(diǎn)是名字的合法部分,一般沒有特殊意義。)R語言的數(shù)據(jù)結(jié)構(gòu)思考題:
1、在命令行鍵入q()的含義是
。
A、保存R程序
B、加載工作空間C、退出R軟件
D、新建工作空間2、table(x)命令的含義是()
。
A、顯示屬性向量x的取值及頻數(shù)
B、顯示屬性向量x的取值
C、顯示向量x的頻數(shù)
D、顯示向量x取值的頻率2.6R語言流程控制程序控制結(jié)構(gòu)是應(yīng)用if條件語句、循環(huán)語句等控制程序的走向。程序控制結(jié)構(gòu)又稱為流程控制。條件語句包括if,switch語句,可用復(fù)合表達(dá)式而且可用ifelse,switch語句根據(jù)條件表達(dá)式的值,選擇執(zhí)行的語句組。循環(huán)語句有for、while、repeat語句,并且可用組合break和next語句的方法。常見控制結(jié)構(gòu)的命令if
and
else:測(cè)試邏輯條件switch:分支的選擇for:
用于執(zhí)行固定次數(shù)的循環(huán)while:用于在某個(gè)條件成立時(shí)執(zhí)行循環(huán)repeat:執(zhí)行無限循環(huán)break:終止并跳出循環(huán)next:
跳過循環(huán)中的當(dāng)前迭代return:
從函數(shù)中退出分支選擇循環(huán)控制if-else語句如果條件成立,程序就做某件事否則(另一種條件下)。程序做另一件事if(<condition>){ ##dosomething}else{## dosomethingelse
}在}和else之間不能有新的行條件語句if-else語句else不是必須的,如果只需要在某條件成立時(shí)執(zhí)行某個(gè)任務(wù),那么只要使用if語句就可以了if(<condition>){##dosometh
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版離婚合同:兩個(gè)孩子撫養(yǎng)與財(cái)產(chǎn)分配版B版
- 2025年度文化產(chǎn)業(yè)園物業(yè)委托管理服務(wù)合同4篇
- 2025年度商用廚房設(shè)備安全檢測(cè)及認(rèn)證合同3篇
- 2025年度土地承包經(jīng)營權(quán)流轉(zhuǎn)糾紛調(diào)解合同模板4篇
- 2025年度珠寶首飾代工定制合同范本(高品質(zhì))4篇
- 2024美甲店美甲技師勞務(wù)外包合同參考3篇
- 2025年度智能化工廠承包合同范本8篇
- 2025年度水資源綜合利用項(xiàng)目承包合作協(xié)議樣本4篇
- 2024版畫室合伙協(xié)議合同范本
- 2025年LED照明產(chǎn)品智能照明系統(tǒng)集成設(shè)計(jì)與施工合同3篇
- 血液凈化十大安全目標(biāo)課件
- 鼻竇負(fù)壓置換療課件
- 國際森林日森林防火教育宣傳主題班會(huì)PPT模板
- 2020新譯林版新教材高中英語必修三重點(diǎn)短語歸納小結(jié)
- 藥廠質(zhì)量管理部QA人員崗位設(shè)置表
- 劍橋國際少兒英語“第三級(jí)”單詞默寫表
- (精心整理)高中生物必修二非選擇題專題訓(xùn)練
- 小學(xué)二年級(jí)100以內(nèi)進(jìn)退位加減法混合運(yùn)算
- 福建省流動(dòng)人口信息登記表
- 市委組織部副部長(zhǎng)任職表態(tài)發(fā)言
- HXD1D客運(yùn)電力機(jī)車轉(zhuǎn)向架培訓(xùn)教材
評(píng)論
0/150
提交評(píng)論