《統(tǒng)計分析軟件:使用R與Python》 課件全套 王洪 第1-10章 引言 -Python 數(shù)據(jù)處理_第1頁
《統(tǒng)計分析軟件:使用R與Python》 課件全套 王洪 第1-10章 引言 -Python 數(shù)據(jù)處理_第2頁
《統(tǒng)計分析軟件:使用R與Python》 課件全套 王洪 第1-10章 引言 -Python 數(shù)據(jù)處理_第3頁
《統(tǒng)計分析軟件:使用R與Python》 課件全套 王洪 第1-10章 引言 -Python 數(shù)據(jù)處理_第4頁
《統(tǒng)計分析軟件:使用R與Python》 課件全套 王洪 第1-10章 引言 -Python 數(shù)據(jù)處理_第5頁
已閱讀5頁,還剩928頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1.1統(tǒng)計分析概述1.2現(xiàn)有統(tǒng)計軟件簡介1.3R下載安裝及使用1.4Python下載安裝及使用第1章引言

引言統(tǒng)計分析軟件簡介Excel、SPSS、SAS、Matlab,S-plusPython、RPython語言簡介下載和安裝PythonAnaconda運行PythonR語言簡介下載和安裝RRstudioMarkdown常用的R包R包和R包合集的安裝R包的使用、更新、遷移數(shù)據(jù)分析的未來要求

1.統(tǒng)計學(xué)、數(shù)學(xué)、計算機等專業(yè)優(yōu)先,有統(tǒng)計學(xué)應(yīng)用基礎(chǔ);

2.兩年以上移動互聯(lián)網(wǎng)行業(yè)數(shù)據(jù)分析經(jīng)驗,社交類項目經(jīng)驗更優(yōu);

3.具備產(chǎn)品經(jīng)理經(jīng)驗,理解產(chǎn)品設(shè)計原理與產(chǎn)品邏輯。參與過產(chǎn)品設(shè)計與執(zhí)行;

4.邏輯思維能力強,表達能力強;

5.熟練運用各種內(nèi)外部數(shù)據(jù)統(tǒng)計工具,快速響應(yīng)各個部門的數(shù)據(jù)需求,至少掌握一種統(tǒng)計分析工具,如SAS、SPSS、R等;

6.重視數(shù)據(jù)可視化呈現(xiàn),報告撰寫能力強;

7.好奇心強,對數(shù)據(jù)執(zhí)著,對問題刨根問底。1.1統(tǒng)計分析概述數(shù)據(jù)分析的未來熱門職位發(fā)展“錢”途良好。統(tǒng)計學(xué)就業(yè)前景統(tǒng)計分析的特點1.模型只能是對客觀世界的一種近似,是現(xiàn)實的簡單化或理想化。

Essentially,allmodelsarewrong,butsomeareuseful.——GeorgeBox.“有用的”模型能抓住并凸顯現(xiàn)象中與分析目的最相關(guān)之主要特征,因此統(tǒng)計分析的成功與對主題領(lǐng)域的了解密切相關(guān)。統(tǒng)計分析的特點2.分析者應(yīng)根據(jù)目的來尋找合適的數(shù)據(jù)和分析方法。數(shù)據(jù):數(shù)據(jù)的來源;數(shù)據(jù)的真實性;數(shù)據(jù)所含信息;數(shù)據(jù)是否適合分析。方法:同一個問題,可采用多種分析方法,也可能需要多種方法。統(tǒng)計分析的特點3.統(tǒng)計分析是一個學(xué)習(xí)與實踐的過程統(tǒng)計學(xué):統(tǒng)計學(xué)基礎(chǔ)、多元統(tǒng)計分析、非參數(shù)統(tǒng)計、貝葉斯統(tǒng)計計量經(jīng)濟學(xué):時間序列、面板數(shù)據(jù)、微觀計量、非參數(shù)時間序列分析:一元、多元、波動分析、非線性專業(yè)領(lǐng)域背景知識有關(guān)軟件:Matlab、R、SPSS、SAS、Python從統(tǒng)計認識過程而言,充分體現(xiàn)著定性分析和定量分析對立統(tǒng)一的關(guān)系。定量分析研究是統(tǒng)計研究的特色所在,但統(tǒng)計的定量分析不是純粹數(shù)量意義的,即不是就數(shù)量論數(shù)量,而是基于所研究事物本身的特點,并且從所研究事物的有關(guān)聯(lián)系或現(xiàn)實背景中,緊緊扣住認識所研究事物內(nèi)在本質(zhì)這一主題來展開的,注重的是定量分析背后的具體含義和意義,這也正是統(tǒng)計學(xué)與數(shù)學(xué)的區(qū)別所在。

統(tǒng)計分析的特點那么統(tǒng)計研究怎樣才能通過數(shù)量來體現(xiàn)其具體含義與現(xiàn)實意義?這就必須結(jié)合定性分析,即以定性分析為起點,并以定性分析為終點。具體來說,統(tǒng)計研究總是按照“初步(感性)的定性認識——客觀科學(xué)的定量認識——高級(理性)的定性認識”這一過程來進行的。統(tǒng)計分析的特點1.2現(xiàn)有統(tǒng)計軟件簡介統(tǒng)計軟件的種類很多。有些功能齊全,有些價格便宜;有些容易操作,有些需要更多的實踐才能掌握。還有些是專門的軟件,只處理某一類統(tǒng)計問題。網(wǎng)上可以獲得的統(tǒng)計或者計量軟件起碼有多達幾百種。面對太多的選擇往往給決策帶來困難。這里介紹最常見的幾種。SPSS、EXCEL、SAS、Eviews、R語言、Matlab、Python,……統(tǒng)計軟件的種類很多。差異較大:

功能是否齊全?

價格是否便宜?是否開源?

是否容易操作?

軟件是否太大?

是否專門性軟件?只處理某一類統(tǒng)計問題。 面對太多的選擇往往給決策帶來困難。這里介紹最常見的幾種。1.2現(xiàn)有統(tǒng)計軟件簡介統(tǒng)計軟件——Excel

嚴格說來并不是統(tǒng)計軟件,但作為數(shù)據(jù)表格軟件,必然有一定統(tǒng)計計算功能。而且凡是有MicrosoftOffice的計算機,基本上都裝有Excel。注意:有時在裝Office時沒有裝數(shù)據(jù)分析的功能,那就必須裝了才行。當(dāng)然,畫圖功能是都具備的。對于簡單分析,Excel還算方便,但隨著問題的深入,Excel就不那么“傻瓜”,需要使用函數(shù),甚至根本沒有相應(yīng)的方法了。統(tǒng)計軟件——Excel

SPSS是軟件英文名稱的首字母縮寫,原意為StatisticalPackagefortheSocialSciences,即“社會科學(xué)統(tǒng)計軟件包”。但是隨著SPSS產(chǎn)品服務(wù)領(lǐng)域的擴大和服務(wù)深度的增加,SPSS公司已于2000年正式將英文全稱更改為StatisticalProductandServiceSolutions,意為“統(tǒng)計產(chǎn)品與服務(wù)解決方案”,標(biāo)志著SPSS的戰(zhàn)略方向正在做出重大調(diào)整。

2009年

IBM

收購了

SPSS

公司統(tǒng)計軟件——SPSS操作簡便:界面非常友好,除了數(shù)據(jù)錄入及部分命令程序等少數(shù)輸入工作需要鍵盤鍵入外,大多數(shù)操作可通過鼠標(biāo)拖曳、點擊“菜單”、“按鈕”和“對話框”來完成。編程方便:具有第四代語言的特點,告訴系統(tǒng)要做什么,無需告訴怎樣做。只要了解統(tǒng)計分析的原理,不需通曉統(tǒng)計方法的各種算法,即可得到需要的統(tǒng)計分析結(jié)果。功能強大:具有完整的數(shù)據(jù)輸入、編輯、統(tǒng)計分析、報表、圖形制作等功能。自帶11種類型136個函數(shù)。全面的數(shù)據(jù)接口:能夠讀取及輸出多種格式的文件。如*.dbf文件,文本數(shù)據(jù)文件,Excel的*.xls文件等均可轉(zhuǎn)換成可供分析的SPSS數(shù)據(jù)文件。能夠把SPSS的圖形轉(zhuǎn)換為7種圖形文件。結(jié)果可保存為*.txt,word,PPT及html格式的文件。統(tǒng)計軟件——SPSS統(tǒng)計軟件——SPSS統(tǒng)計軟件——SAS

功能非常齊全(不如R齊全)的軟件;盡管價格相當(dāng)不菲,許多公司,特別是美國制藥公司,還是因為其功能眾多和某些美國政府機構(gòu)(FDA)認可而使用;盡管現(xiàn)在已經(jīng)盡量“傻瓜化”(遠不如SPSS“傻”),但仍然需要一定的訓(xùn)練才可以進入??梢詫λ幊?;幫助系統(tǒng)很差,查尋不易;對于基本統(tǒng)計課程則不那么方便。統(tǒng)計軟件——SAS統(tǒng)計軟件——S-plus

這是R出現(xiàn)之前統(tǒng)計學(xué)家最喜愛的軟件;功能齊全;強大的編程功能,使得研究人員可以編制自己的程序來實現(xiàn)自己的理論和方法;目前正在進行“傻瓜化”以爭取顧客。但仍然以編程方便為顧客所青睞。統(tǒng)計軟件——S-plus統(tǒng)計軟件——MATLAB

這也是應(yīng)用于各個領(lǐng)域的以編程為主的軟件,在理工領(lǐng)域應(yīng)用最廣泛。編程類似于S和R。但是統(tǒng)計方法不多。StatisticsToolbox—統(tǒng)計工具箱EconometricsToolbox-計量經(jīng)濟學(xué)工具箱統(tǒng)計軟件——MATLAB統(tǒng)計軟件——Python簡介Python是一種面向?qū)ο蟆⒅弊g式計算機程序設(shè)計語言,由荷蘭人GuidovanRossum發(fā)明于1989年,1991年發(fā)行第一個公開發(fā)行版。它常被昵稱為膠水語言,它能夠很輕松的把用其他語言制作的各種模塊(尤其是C/C++)輕松地聯(lián)結(jié)在一起。

之所以選中Python(大蟒蛇的意思)作為程序的名字,是因為他是一個叫MontyPython的喜劇團體的愛好者。Python是一種解釋型、高級和通用的編程語言,支持多種編程范型,包括結(jié)構(gòu)化、過程式、反射式、面向?qū)ο蠛秃瘮?shù)式編程。它擁有動態(tài)類型系統(tǒng)和垃圾回收功能,能夠自動管理內(nèi)存使用,并且其本身擁有一個巨大而廣泛的標(biāo)準庫。除此之外,Python官方的第三方庫的倉庫PythonPackageIndex(PyPI,/)還包括數(shù)十萬個由第三方團隊或個人開發(fā)的Python庫。統(tǒng)計軟件——Python簡介Python2.0于2000年發(fā)布,Python3.0于2008年發(fā)布。需要注意的是,Python3.x是Python2.x的主要修訂版,兩者并不完全兼容。根據(jù)TIOBE編程語言排行榜最新數(shù)據(jù),Python是使用率排名第一的編程語言。統(tǒng)計軟件——Python簡介

R免費,永遠正版R資源公開(不是黑匣子)R可以在UNIX,Windows和MacosX上運行R有優(yōu)秀的內(nèi)在幫助系統(tǒng)R有優(yōu)秀的畫圖功能學(xué)生能夠輕松地轉(zhuǎn)到商業(yè)支持的S-Plus程序(如果需要使用商業(yè)軟件)R語言有一個強大的,容易學(xué)習(xí)的語法,有許多內(nèi)在的統(tǒng)計函數(shù)統(tǒng)計軟件——R軟件其它統(tǒng)計軟件

Eviews:用于處理回歸和時間序列的經(jīng)濟類軟件Rats:專門處理時間序列數(shù)據(jù)Amos:結(jié)構(gòu)模型Nlogit:離散選擇模型和受限因變量模型Stata:面板數(shù)據(jù)模型功能很強大Gauss:運算速度最快的計量經(jīng)濟學(xué)軟件。計量經(jīng)濟學(xué)大牛的最愛。FORTRAN:這是應(yīng)用于各個領(lǐng)域的歷史很長的非常優(yōu)秀的數(shù)學(xué)編程軟件,功能強大,也有一定的統(tǒng)計軟件包。計算速度比這里介紹的都快得多。但需要編程和編譯。操作不那么容易。KDnuggets-數(shù)據(jù)分析師的工具軟件Kaggle-統(tǒng)計學(xué)家使用的分析軟件關(guān)于編程語言沒有最好的語言,只有最合適的語言;沒有糟糕的語言,只有糟糕的程序員;沒有一種語言是萬能的,只會一種語言是萬萬不能的;廢除對語言的宗教信仰,建立對語言的哲學(xué)思維;編程就是在人腦和電腦之間尋找最佳平衡點的過程。關(guān)于統(tǒng)計編程語言個人認為統(tǒng)計分析最佳搭配:

R[統(tǒng)計分析]+Python[數(shù)據(jù)預(yù)處理]R語言的由來R語言是從S語言演變而來的。S語言是二十世紀70年代誕生于貝爾實驗室,由RickBecker,JohnChambers,AllanWilks開發(fā)?;赟語言開發(fā)的商業(yè)軟件Splus,可以方便的編寫函數(shù)、建立模型,具有良好的擴展性,取得了巨大成功。1995年由新西蘭Auckland大學(xué)統(tǒng)計系的RobertGentleman和RossIhaka,編寫了一種能執(zhí)行S語言的軟件,并將該軟件的源代碼全部公開,這就是R軟件,其命令統(tǒng)稱為R語言。1.3R下載、安裝及基本操作R軟件簡介R是開源軟件,代碼全部公開,對所有人免費。R可在多種操作系統(tǒng)下運行,如Windows、MacOS、多種Linux和UNIX等。R需要輸入命令,可以編寫函數(shù)和腳本進行批處理運算,語法簡單靈活。目前在R網(wǎng)站上約有20000多個程序包,涵蓋了基礎(chǔ)統(tǒng)計學(xué)、社會學(xué)、經(jīng)濟學(xué)、生態(tài)學(xué)、地理學(xué)、醫(yī)學(xué)統(tǒng)計學(xué)、生物信息學(xué)等諸多方面。通過用戶自編程序,R語言很容易延伸和擴大。它就是這樣成長的。R是計算機編程語言。對于熟練的編程者,可能會覺得該語言比其他語言更容易上手。而對計算機初學(xué)者,學(xué)習(xí)R語言使得學(xué)習(xí)下一步的其他編程不那么困難。那些傻瓜軟件(SAS,SPSS等)語言的語法則完全不同。R的優(yōu)點R的缺點沒有商業(yè)支持(但有網(wǎng)上支持);需要編程,不夠傻瓜;速度不如C++或FORTRAN下載和安裝RTheComprehensiveR

ArchiveNetwork簡稱CRAN,提供下載安裝程序和相應(yīng)軟件包。R主頁/

Windows版本下載地址之一:/mirrors.html下載完成后,雙擊/CRAN/bin/windows/base/R-3.5.1-win.exe

開始安裝。一直點擊下一步,各選項默認。圖1R軟件首頁/

R登陸界面(Windows版)菜單欄快捷按鈕控制臺命令行R程序包為什么要安裝程序包?特定的分析功能,需要用相應(yīng)的程序包實現(xiàn)。例如:時間序列分析,往往要用到TSA程序包,多元正態(tài)分布mvtnorm包等等。程序包是什么?

R程序包是多個函數(shù)的集合,具有詳細的說明和示例。Window下的R程序包是已經(jīng)編譯好的zip包。每個程序包包含R函數(shù)、數(shù)據(jù)、幫助文件、描述文件等。常用的R包常用R程序包base-R基礎(chǔ)功能包stats-R統(tǒng)計學(xué)包nlme-線性及非線性混合效應(yīng)模型Graphics-繪圖lattice-柵格圖TSA-

時間序列分析mvtnorm-多元正態(tài)分布分析truncnorm-截尾正態(tài)分布cluster-聚類分析TSA包頁面R程序包在CRAN提供了每個包的源代碼和編譯好的MacOS、Window下的程序包以TSA包為例,CRAN提供了:Packagesource:TSA_1.01.tar.gzMacOSXbinary:TSA_1.01.tgzWindowsbinary:TSA_1.01.zip

Referencemanual:TSA.pdf

等Window平臺下程序包為zip文件,安裝時不要解壓。R程序包安裝1連網(wǎng)時,用函數(shù)install.packages(),選擇鏡像后,程序?qū)⒆詣酉螺d并安裝程序包。例如:打開RGui,在控制臺中輸入

install.packages(“TSA")2安裝本地zip包路徑:Packages>installpackagesfromlocalfiles選擇光盤或者本地磁盤上存儲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")程序包使用在控制臺中輸入如下命令:library(TSA)查看幫助文件如何知道TSA程序包內(nèi)部都有哪些函數(shù)?最常用的方法:1輸入命令??TSA2查看pdf幫助文檔(從程序包下載頁面下載)幫助文件的內(nèi)容以lm函數(shù)為例:?lmCRANtask

Views

是一個由R語言社區(qū)成員提供的按功能分類的R包合集,如貝葉斯、時間序列、生存分析等。RTaskViewsRTaskViews如果你想快速安裝某個類型的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編程中別廣泛的使用,相對于R自帶的GUI界面而已具有更加友好的界面、更好的項目管理功能、package管理功能、圖片預(yù)覽功能等。RStudio工具下載:/products/rstudio/download/Rstudio性能:MRO引入“IntelMKLforparallelmathematicalcomputing”發(fā)揮多核處理器的性能,提高了R的運行速度??芍貜?fù)性:MRO引入了checkpoint包,每天對R包(CRAN)進行鏡像,這樣當(dāng)用戶設(shè)置時間之后,安裝使用這一天的R包,腳本運行的結(jié)果應(yīng)該是一致的。MicrosoftROpen官網(wǎng):/open和對應(yīng)版本R完全兼容,更新比官方R發(fā)行版要慢,Mac版更慢MicrosoftROpenMarkdownMarkdown是一種輕量級標(biāo)記語言,純文本格式編寫文檔,可與HTML混編,可導(dǎo)出HTML、Word、PDF格式的文件,是RStudio內(nèi)置的幫助文件的主要格式。RMarkdown則是通過R語言制作的Markdown格式的文件,其中包含嵌入的R語言代碼。通過RMarkdown編寫的文檔,簡潔、高效、易讀、易寫,所有作業(yè)及作業(yè)要求用:RMarkdown格式MarkdownRMarkdown文檔編輯需要安裝rmarkdown包RMarkdown代碼及編譯結(jié)果在Windows和Mac上安裝和運行Python的方法比較簡單,從Python的官網(wǎng)(/downloads/)下載最新版本的Python,運行安裝程序文件并按照步驟安裝即可。在安裝過程中,最好選中將Python添加到環(huán)境變量,這會將Python添加到環(huán)境變量中,保證可從計算機的任何路徑運行Python。1.4Python下載、安裝及運行

Anaconda安裝Anaconda集成環(huán)境其中AnacondaNavigator提供了常用Python及開發(fā)軟件的導(dǎo)航,AnacondaPowershellPrompt和AnacondaPrompt提供了命令行界面,JupyterNotebook是符合Markdown格式的Python筆記本,Spyder則是免費集成開發(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)計分析軟件簡介Excel、SPSS、SAS、Matlab,S-plusPython、RPython語言簡介下載和安裝PythonAnaconda運行PythonR語言簡介下載和安裝RRstudioMarkdown常用的R包R包和R包合集的安裝R包的使用、更新、遷移本章小結(jié)2.1HelloWorld!2.2R語言運行2.3R語言變量和常量2.4R語言對象基本操作2.5R語言數(shù)據(jù)類型2.6R語言流程控制2.7R語言自定義函數(shù)第2章

R語言編程基礎(chǔ)R語言基礎(chǔ)R語言變量和常量R語言數(shù)據(jù)對象變量、向量、數(shù)組、矩陣、數(shù)據(jù)框、列表控制、循環(huán)if\switch條件語句for\while\repeat循環(huán)語句R語言自定義函數(shù)R語言運行2.1R的HelloWorld>newstr<-"Hello,World!">print(newstr)

[1]"Hello,World!"

>#myfirstRcode提示符注釋賦值2.2R語言運行當(dāng)R啟動時,以下常用packages自動加載:–base:基本函式(IO,敘述統(tǒng)計,etc.)–stats:常用統(tǒng)計分析(t.test,anova,etc.)–methods:定義classesofobjects–utils:基本程序編寫工具–graphics:基本繪圖工具–grDevices:基本繪圖接口–datasets:數(shù)據(jù)范例編寫程序:「文件」「建立新的程序腳本」或直接于「>」后編寫空一行或用分號「;」將指令分開套用已寫好的程序:「文件」「開啟程序腳本」修改或繼續(xù)編寫程序:「文件」「開啟程序腳本」程序包(package)加載:「程序包」「加載程序包」清理窗口:右鍵「清除窗口」「←」、「→」或「=」表輸入前面已執(zhí)行完的指令:「↑」逐一顯示+:程序未完結(jié)就換行會顯示「+」提醒,欲結(jié)束按「Esc」英文字母大小寫視為不同的符號#井字號之后為批注,程序不會執(zhí)行結(jié)束R程序:直接關(guān)閉或指令「q()」ls()列出工作空間中的對象rm()刪除工作空間中的對象rm(list=ls())刪除空間中所有對象save.image()保存工作鏡像sink()將運行結(jié)果保存到指定文件中g(shù)etwd()顯示當(dāng)前工作文件夾setwd()設(shè)定工作文件夾R語言腳本是一系列命令可以先批量的編好程序,或者對別人已經(jīng)編好的程序進行修改。之后輸入到控制臺進行調(diào)試,以滿足數(shù)據(jù)分析的需求語言高亮顯示在代碼較多的情況下,有時需要對行數(shù)、函數(shù)、括號、函數(shù)選項等進行高亮顯示,設(shè)置成不同的顏色,以減少錯誤腳本編輯器R自帶的腳本編輯器RStudio自帶的腳本編輯器Editplus(

)Ultraedit(/)Emacs(/software/emacs/)Notepad++(/)記事本或?qū)懽职宓鹊纫粋€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)如何運行R腳本程序通過source()函數(shù)運行source(“d:/regression.r”)通過R腳本編輯器運行路徑:RGui>File>OpenScript#Ctrl+R運行直接粘貼到R控制臺ctrl+c,ctrl+v2.3R語言常量和變量常量是其值不變的量,包括1234,"abc"等數(shù)值、"rlang"等字符串和邏輯值等基本類型。其中,邏輯真值寫為T或TRUE(注意區(qū)分大小寫,寫t或true都沒意義),邏輯假值寫為F或FALSE。R中還有一些特殊類型的常量,其中NULL表示空值NA(NotAvailable的意思)表示缺失數(shù)據(jù)Inf和-Inf表示正無窮和負無窮NaN(NotaNumber的意思)表示不是數(shù)字的值變量是其值可變的量,如x<-3,x就是一個變量,當(dāng)x<-4時,x的值被重新賦值為4。變量名由字母、數(shù)字和下劃線組成,變量的第一個字符為字母。R語言變量命名的大原則是:只有字母(區(qū)分大小寫)、數(shù)字、“_”(下劃線)、“.”(英文句號)可以出現(xiàn)。變量長度沒有限制,但不能有中文、空格、連字符”-“的存在。變量命名還要滿足以下條件:不能以數(shù)字或下劃線開頭開頭必須是英文字母或者點可以以點號開頭,但點號后面的符號不能是數(shù)字符號說明 1)> 命令或運算提示符 2)+ 續(xù)行符 3)# 注釋、說明語句字符賦值符號 1)<- 2)=R語言常見運算符+ 加號- 減號* 乘號

除號%%取模%/%整除^ 乘方運算優(yōu)先級別遞增+-*/%%,%/%^TRUE==1;FALSE==0基本算術(shù)運算> 大于< 小于>= 大于等于 <= 小于等于== 等于!= 不等于

比較運算得到的結(jié)果是邏輯常量TRUE(真)和FALSE(假)。比較運算符!x 邏輯非當(dāng)前邏輯值取反運算。x&y邏輯與如果兩個表達式的值均為TRUE,結(jié)果才為TRUE,否則為FALSE。x&&y邏輯與

若x,y為向量只比較第一個元素。x|y邏輯或如果x和y的值均為FALSE,結(jié)果為FALSE,否則為TRUE。向量對每個元素進行比較。x||y邏輯或若x和y為向量只比較第一個元素。xor(x,y)異或兩個邏輯值不相同,則異或結(jié)果為真。反之,為假。邏輯運算符思考題

下列()表示的是變量。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下列賦值語句錯誤的是()。A.a<-1 B.a=1 C.1=a D.A_1<-”1”R語言是基于對象(Object)的語言基本的數(shù)據(jù)類型有:向量、矩陣、列表等復(fù)雜的數(shù)據(jù)對象有:數(shù)據(jù)框?qū)ο?,時間序列對象,模型對象,圖形對象,等等。這里先介紹下R中數(shù)據(jù)對象的基本屬性和有關(guān)操作。2.4R語言對象基本操作

對象和它的模式與屬性R是一種基于對象的語言,R的對象包括了若干元素作為其數(shù)據(jù),另外,還可以有一些特殊數(shù)據(jù)稱為屬性(attribute),并規(guī)定了一些特定的操作(如打印、繪圖);R對象分為:單純對象、復(fù)合對象單純對象:所有元素都是一種基本類型,復(fù)合對象的元素可以是不同類型的對象;固有屬性:mode和lengthR對象都有兩個基本的屬性:mode(類型)屬性和length(長度)屬性,比如向量的類型為logical(邏輯型)、numeric(數(shù)值型)、complex(復(fù)數(shù)型)、character(字符型),比如:mode(c(1,3,5)>5)R對象有一種特別的null(空值型)型,只有一個特殊的NULL值為這種類型,表示沒有值(不同于NA,NA是一種特殊值,而NULL根本沒有對象值)attributes()和attr()函數(shù)attributes(object)返回對象object的各特殊屬性組成的列表,不包括固有屬性mode和length.例如:x<-c(apple=2.5,orange=2.1);xattributes(x)可以用attr(object,name)的形式存取對象object的名為name的屬性,例如,>attr(x,"names")[1]"apple""orange“也可以把attr()函數(shù)寫作賦值的左邊以改變屬性值或定義新的屬性,例如,對象的class屬性在R中可以用特殊的class屬性來支持面向?qū)ο蟮木幊田L(fēng)格,對象的class屬性用來區(qū)分對象的類,可以寫出通用函數(shù)根據(jù)對象類的不同進行不同的操作,比如,print()函數(shù)對于向量和矩陣的顯示方法就不同,plot()函數(shù)對不同類的自變量作不同的圖形。為了暫時去掉一個有類的對象的class屬性,可以使用unclass(object)函數(shù)。對于簡單向量來說,class函數(shù)返回的結(jié)果和mode()函數(shù)一致,但對于矩陣、數(shù)組、數(shù)據(jù)框等數(shù)據(jù)對象,結(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言的角度返回對象的抽象類,一個數(shù)據(jù)對象可能有多個類,用戶可以自行定義類。mode()函數(shù)返回的是內(nèi)存中數(shù)據(jù)對象的基本類型,一個數(shù)據(jù)對象只能有一個基本數(shù)據(jù)類型(numeric、complex、character、logical、list、function等),用戶無法自行定義。要判斷某對象是否某類型,有許多個類似于is.numeric()的函數(shù)可以完成.-is.numeric(x)用來檢驗對象x是否為數(shù)值型,它返回一個邏輯型結(jié)果.-is.character()可以檢驗對象是否為字符型,等等.如:z<-0:9is.numeric(z)is.character(z)R可以強制進行類型轉(zhuǎn)換,例如digits<-as.character(123);digitsd<-as.numeric(digits);d

列出對象與刪除對象

函數(shù)ls()的功能是顯示所有在內(nèi)存中的對象。要在內(nèi)存中刪除某個對象,可利用函數(shù)rm()。rm(list=ls())#刪除內(nèi)存中的所有對象name<-"Carmen"n1<-10n2<-100m<-0.5ls()##[1]"m""n1""n2""name"2.5

R語言數(shù)據(jù)類型

向量是有相同基本類型的元素序列,即一維數(shù)組定義向量的最常用辦法是使用函數(shù)c(),它把若干個數(shù)值或字符串組合為一個向量,比如:>x=c(1:3,10:13)>x[1]12310111213R中用符號“<-”、“=”來為變量賦值。另一種賦值的辦法是用assign函數(shù),比如>x1=c(1,2)和

>assign(“x1”,c(1,2))相同向量(Vector)與賦值數(shù)值型向量運算可以對向量進行加(+)減(-)乘(*)除(/)、乘方(^)運算,其含意是對向量的每一個元素進行運算。例如:

>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é)果是對向量的每一個元素取相應(yīng)的函數(shù)值函數(shù)min和max分別取向量自變量的最小值和最大值,函數(shù)sum計算向量自變量的元素和,函數(shù)mean計算均值,函數(shù)var計算樣本方差(分母為n-1),函數(shù)sd計算標(biāo)準差如果求var(x)而x是矩陣,則結(jié)果為樣本協(xié)方差陣。(行向量為觀測值)任何數(shù)與缺失值的運算結(jié)果仍為缺失值。例如,>2*c(1,NA,2)[1]2NA4>sum(c(1,NA,2))[1]NA產(chǎn)生有規(guī)律的數(shù)列在R中很容易產(chǎn)生一個等差數(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ù)。如只指定一個自變量n>0,則seq(n)相當(dāng)于1:n。指定兩個自變量時,第一量是開始值,第二量是結(jié)束值,如seq(-2,3)是從-2到3,默認公差為1。R函數(shù)調(diào)用的一個很好的特點是它可以使用不同個數(shù)的自變量,函數(shù)可以對不同類型的自變量給出不同結(jié)果,自變量可以用“自變量名=自變量值”的形式指定。例如,seq(-2,3)可以寫成seq(from=-2,to=3)。可以用一個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ù)列長度,如seq(from=10,length=5)產(chǎn)生10到14。seq函數(shù)還可以用一種seq(along=向量名)的格式,這時只能用這一個參數(shù),產(chǎn)生該向量的下標(biāo)序列,如:

>x[1]1.004.006.25>seq(along=x)[1]123另一個類似的函數(shù)是rep,它可以重復(fù)第一個自變量若干次,例如:

>rep(x,3)[1]1.004.006.251.004.006.251.004.006.25

第一個參數(shù)名為x,第二個參數(shù)名為times(重復(fù)次數(shù))。此外numeric(n)可以產(chǎn)生一個長度為n的零向量

邏輯向量向量可以取邏輯值,如:

>l=c(T,T,F)>l輸出[1]TRUETRUEFALSE

當(dāng)然,邏輯向量往往是一個比較的結(jié)果,如:

>x輸出[1]1.004.006.25>l=x>3>l輸出[1]FALSETRUETRUE一個向量與常量比較大小,結(jié)果還是一個向量,元素為每一對比較的結(jié)果邏輯值。兩個向量也可以比較,如:>log(10*x)[1]2.3025853.6888794.135167>log(10*x)>x輸出[1]TRUEFALSEFALSE

比較運算符包括<,<=,>,>=,==,!=。邏輯向量兩個邏輯向量可以進行與(&)、或(|)運算,結(jié)果是對應(yīng)元素運算的結(jié)果。對邏輯向量x計算!x表示取每個元素的非。例如:>x=c(1,4,6.25,1.6)>(x>1.5)&(x<3)[1]FALSEFALSEFALSETRUE注意和(x>1.5)&&(x<3)的區(qū)別判斷一個邏輯向量是否都為真值的函數(shù)是all,如:>all(log(10*x)>x)[1]FALSE判斷是否其中有真值的函數(shù)是any,如:

>any(log(10*x)>x)[1]TRUE邏輯向量

函數(shù)is.na(x)用來判斷x的每一個元素是否缺失。如>is.na(c(1,NA,3))[1]FALSETRUEFALSE邏輯值可以強制轉(zhuǎn)換為整數(shù)值,TRUE變成1,F(xiàn)ALSE變成0。例如,age>65為老年人,否則為年輕人,可以用c(“young”,“old”)[(age>65)+1]表示。當(dāng)年齡大于65時age>65等于TRUE,加1則把TRUE轉(zhuǎn)換為數(shù)值型的1,結(jié)果得2,于是返回第二個下標(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ù)用來把它的自變量連成一個字符串,中間用空格分開,例如:>paste("My","Job")[1]"MyJob">paste('Hi','早')輸出[1]"Hi早"連接的自變量可以是向量,這時各對應(yīng)元素連接起來,長度不相同時較短的向量被重復(fù)使用。自變量可以是數(shù)值向量,連接時自動轉(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ù),則把字符串向量的各個元素連接成一個字符串,中間用collapse指定的值分隔。比如

>paste(c('a','b'),collapse='.')得到'a.b'。兩個或者更多字符串對象根據(jù)元素對應(yīng)關(guān)系拼接一個字符串內(nèi)部元素如何連接復(fù)數(shù)向量R支持復(fù)數(shù)運算。復(fù)數(shù)常量只要用3.5+2.1i這樣的格式即可。復(fù)向量的每一個元素都是復(fù)數(shù)。可以用complex()函數(shù)生成復(fù)向量(見幫助)。

>mydat=complex(real=3.5,imaginary=2.1)>mydat[1]3.5+2.1iRe()計算實部,Im()計算虛部,>Re(mydat)>[1]3.5

>Im(mydat)>[1]2.1

Mod()計算復(fù)數(shù)模,Arg()計算復(fù)數(shù)幅角。>Mod(mydat)[1]4.081666因子向量統(tǒng)計中的變量重要類別:區(qū)間變量和名義變量、有序變量。區(qū)間變量取連續(xù)的數(shù)值,可以進行求和、平均等運算。名義變量和有序變量取離散值,既可用數(shù)值表示也可取字符型值,其具體數(shù)值沒有數(shù)量意義,不能用于加減乘除計算而只能用來分類或者計數(shù)。名義變量比如性別、省份、職業(yè),有序變量比如班級名次、質(zhì)量等級等。因為離散變量有各種不同表示方法,在R中為統(tǒng)一起見使用因子(factor)來表示這種分類變量。還提供了有序因子(orderedfactor)來表示有序變量。因子是一種特殊的字符型向量,其中每一個元素取一組離散值中的一個,而因子對象有一個特殊屬性levels表示這組離散值(用字符串表示)。例如:>x<-c("男","女","男","男","女")>y<-factor(x)>y[1]男女男男女

Levels:男女函數(shù)factor()用來把一個向量編碼成為一個因子。一般形式為:factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE)可以自行指定各離散取值水平(levels),不指定時由x的不同值來求得。labels可以用來指定各水平的標(biāo)簽,不指定時用各離散取值的對應(yīng)字符串。exclude參數(shù)用來指定要轉(zhuǎn)換為缺失值(NA)的元素值集合。如果指定了levels,則因子的第i個元素當(dāng)它等于水平中第j個時元素值取“j”,如果它的值沒有出現(xiàn)在levels中則對應(yīng)因子元素值取NA。ordered取真值時表示因子水平是有次序的(按編碼次序)。可以用is.factor()檢驗對象是否因子,用as.factor()把一個向量轉(zhuǎn)換成一個因子。>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)計是頻數(shù)統(tǒng)計,用函數(shù)table()來計數(shù)。例如,>sex=factor(c("男","女","男","男","女"))>res.tab<-table(sex)>res.tab

男女

32

表示男性3人,女性2人。table()的結(jié)果是一個帶元素名的向量,元素名為因子水平,元素值為該水平出現(xiàn)的頻數(shù)。R的結(jié)果除了可以顯示外,本身都是R對象(如這里的向量結(jié)果),可以很方便地進一步處理??梢杂脙蓚€或多個因子進行交叉分類。比如,性別(sex)和職業(yè)(job)交叉分組可以用table(sex,job)來統(tǒng)計每一交叉類的頻數(shù),結(jié)果為一個矩陣,矩陣帶有行名和列名,分別為兩個因子的各水平名。改變部分元素值的技術(shù)與邏輯值下標(biāo)方法結(jié)合可以定義向量的分段函數(shù)。例如:要定義y=f(x)為當(dāng)x<0時取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時取x,3.0=<x<3.5時取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)是帶多個下標(biāo)的類型相同的元素的集合,常用的是數(shù)值型的數(shù)組如矩陣,也可以有其它類型(如字符型、邏輯型、復(fù)型數(shù)組)。數(shù)組有一個特征屬性叫做維數(shù)向量(dim屬性),比如維數(shù)向量有兩個元素時數(shù)組為二維數(shù)組(矩陣)。維數(shù)向量的每一個元素指定了該下標(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的各元素次序為a[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)該是一個向量,表示數(shù)組的元素值組成的向量。dim參數(shù)可省,省略時作為一維數(shù)組(但不同于向量)。dimnames屬性可以省略,不省略時是一個長度與維數(shù)相同的列表。a=array(c(1:24),dim=c(2,3,4),dimnames=NULL)數(shù)組下標(biāo)訪問數(shù)組的某個元素,寫出數(shù)組名和方括號內(nèi)用逗號分開的下標(biāo)即可,如a[2,1,2]。在每一個下標(biāo)位置寫一個下標(biāo)向量,表示對這一維取出所有指定下標(biāo)的元素,如a[1,2:3,2:3]取出所有第一下標(biāo)為1,第二下標(biāo)為2或3,第三下標(biāo)為2或3的元素。略寫某一維的下標(biāo),則表示該維全選。a[,,]或a[]都表示整個數(shù)組。a[]=0把元素都賦成0。

還有一種特殊下標(biāo)是對于數(shù)組只用一個下標(biāo)向量(是向量,不是數(shù)組),比如a[3:4],這時忽略數(shù)組的維數(shù)信息,把下標(biāo)表達式看作是對數(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ù)填入矩陣時按行次序還是列次序,缺省情況下按列次序。

dimnames缺省是空值,否則是一個長度為2的列表,列表第一個成員是長度與行數(shù)相等的字符型向量,表示每行的標(biāo)簽,列表第二個成員是長度與列數(shù)相同的字符型向量,表示每列的標(biāo)簽。例如,定義一個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ù)個數(shù)允許少于所需的數(shù)據(jù)個數(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ù)。矩陣之間進行普通的加減乘除四則運算,即數(shù)組的對應(yīng)元素之間進行運算,所以注意A*B不是矩陣乘法而是矩陣對應(yīng)元素相乘。要進行矩陣乘法,使用運算符%*%,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另外,向量用在矩陣乘法中可以作為行向量看待也可以作為列向量看待,這要看哪一種觀點能夠進行矩陣乘法運算。例如,設(shè)x是一個長度為n的向量,A是一個n*n矩陣,則“x%*%A%*%x”表示二次型。但是,有時向量在矩陣乘法中的地位并不清楚,比如“x%*%x”就既可能表示內(nèi)積,也可能表示n*n陣。因為前者較常用,所以R選擇表示前者,但內(nèi)積最好還是用crossprod(x)來計算。要表示n*n陣,可以用“cbind(x)%*%x”或“x%*%rbind(x)”。函數(shù)crossprod(X,Y)表示一般的交叉乘積(內(nèi)積),即X的每一列與Y的每一列的內(nèi)積組成的矩陣。如果X和Y都是向量則是一般的內(nèi)積。只寫一個參數(shù)X的crossprod(X)計算X自身的內(nèi)積。其它矩陣運算還有solve(A,b)解線性方程組,solve(A)求方陣A的逆矩陣,svd()計算奇異值分解,qr()計算QR分解,eigen()計算特征向量和特征值。詳見隨機幫助,例如:>?qr函數(shù)diag()的作用依賴于其自變量。diag(vector)返回以自變量(向量)為主對角元素的對角矩陣。diag(matrix)返回由矩陣的主對角元素組成的向量。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ù)框每列是一個變量,每行是一個樣品的觀測值。數(shù)據(jù)框有更一般的定義。它是一種特殊的列表對象,有一個值為“data.frame”的class屬性,各列表成員必須是向量(數(shù)值型、字符型、邏輯型)、因子、數(shù)值型矩陣、列表,或其它數(shù)據(jù)框。向量、因子成員為數(shù)據(jù)框提供一個變量,如果向量非數(shù)值型則會被強制轉(zhuǎn)換為因子,而矩陣、列表、數(shù)據(jù)框這樣的成員為新數(shù)據(jù)框提供了和其列數(shù)、成員數(shù)、變量數(shù)相同個數(shù)的變量。作為數(shù)據(jù)框變量的向量、因子或矩陣必須具有相同的長度(行數(shù))。盡管如此,我們一般還是可以把數(shù)據(jù)框看作是一種推廣了的矩陣,它可以用矩陣形式顯示,可以用對矩陣的下標(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

如果一個列表的各個成分滿足數(shù)據(jù)框成分的要求,它可以用as.data.frame()函數(shù)強制轉(zhuǎn)換為數(shù)據(jù)框。比如,上面的d如果先用list()函數(shù)定義成了一個列表,就可以強制成為一個數(shù)據(jù)框。一個矩陣可以用data.frame()轉(zhuǎn)換為一個數(shù)據(jù)框,如果它原來有列名則其列名被作為數(shù)據(jù)框的變量名,否則系統(tǒng)自動為矩陣的各列起一個變量名(如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ù)框的各變量也可以按列表引用(即用雙括號[[]]或$符號引用)。數(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ù)對象相同點不同點數(shù)據(jù)框二維行與列的意義不同:列表示變量;行表示觀測值。矩陣、二維數(shù)組行列意義相同思考題

下列說法錯誤的是()。A.?dāng)?shù)據(jù)框和矩陣都是二維的。B.?dāng)?shù)據(jù)框的行與列意義不同,而矩陣的行與列只代表數(shù)據(jù)的位置。C.顯示數(shù)據(jù)框時左側(cè)會顯示觀測值的序號,顯示矩陣時只顯示矩陣中的數(shù)據(jù)。D.可以用data.frame函數(shù)建立數(shù)據(jù)框,用matrix()函數(shù)建立矩陣。列表(list)定義列表(List)是R中最復(fù)雜的數(shù)據(jù)類型,一般來說,列表是數(shù)據(jù)對象的有序集合,但是,列表的各個元素(item)的數(shù)據(jù)類型可以不同,每個元素的長度可以不同,是R中最靈活的數(shù)據(jù)類型。列表項可以是列表類型,因此,列表被認為是遞歸變量,與之相對,向量,數(shù)組,矩陣,數(shù)據(jù)框被認為是原子變量。列表元素用“列表名[[下標(biāo)]]”的格式引用。但是,列表不同于向量,我們每次只能引用一個元素,如rec[[1:2]]的用法是不允許的。注意:“列表名[下標(biāo)]”或“列表名[下標(biāo)范圍]”的用法也是合法的,但其意義與用兩重括號的記法完全不同,兩重記號取出列表的一個元素,結(jié)果與該元素類型相同,如果使用一重括號,則結(jié)果是列表的一個子列表(結(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]])在定義列表時如果指定了元素的名字(如rec中的name,age,scores),則引用列表元素還可以用它的名字作為下標(biāo),格式為“列表名[["元素名"]]”,如:

>rec[["age"]][1]30另一種格式是“列表名$元素名”,如:

>rec$age[1]30

其中“元素名”可以簡寫到與其它元素名能夠區(qū)分的最短程度,比如“rec$s”可以代表“rec$score”。這種寫法方便了交互運行,編寫程序時一般不用簡寫,以免降低程序的可讀性。使用元素名的引用方法可以讓我們不必記住某一個下標(biāo)代表那一個元素,而直接用易記的元素名來引用元素。事實上,已知向量和矩陣都可以指定元素名、行名、列名。定義列表使用list()函數(shù),每一個自變量變成列表的一個元素,自變量可以用“名字=值”的方式給出,即給出列表元素名。自變量的值被復(fù)制到列表元素中,自變量如果是變量并不會與該列表元素建立關(guān)系(改變該列表元素不會改變自變量的值)。(例見后)修改列表列表的元素可以修改,只要把元素引用賦值即可。如:>rec$age<-45

甚至>rec$age<-list(19,29,31)(可以任意修改一個列表元素)。如果被賦值的元素原來不存在,則列表延伸以包含該新元素。例如,rec現(xiàn)在共有三個元素,我們定義一個新的命名元素,則列表長度變?yōu)?,再定義第六號元素則列表長度變?yōu)?(第5個元素自動為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第五號元素因為沒有定義所有其值是“NULL”,這是空對象的記號。如果rec是一個向量,則其空元素為“NA”,這是缺失值的記號。從這里我們也可以體會“NULL”與“NA”的區(qū)別。幾個列表可以用連接函數(shù)c()連接起來,結(jié)果仍為一個列表,其元素為各自變量的列表元素。如:>list.ABC<-c(list.A,list.B,list.C)(注意在R中句點是名字的合法部分,一般沒有特殊意義。)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ù)合表達式而且可用ifelse,switch語句根據(jù)條件表達式的值,選擇執(zhí)行的語句組。循環(huán)語句有for、while、repeat語句,并且可用組合break和next語句的方法。常見控制結(jié)構(gòu)的命令if

and

else:測試邏輯條件switch:分支的選擇for:

用于執(zhí)行固定次數(shù)的循環(huán)while:用于在某個條件成立時執(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不是必須的,如果只需要在某條件成立時執(zhí)行某個任務(wù),那么只要使用if語句就可以了if(<condition>){##dosometh

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論