1. 程式人生 > >R語言快速入門

R語言快速入門

R 語言基礎

1 引言:

 R 語言是什麼?R 語言何以在短短几年的時間內佔領統計、金融、生物、心理學等幾乎所有的數量分析領域?R 語言在資料處理上有著

 SAS、SPSS 等統計軟體無法比擬的靈活性,這也是我們要以R 語言作為研究工具主要原因。在課程的開始部分我們將簡要介紹R 語言的

 基本情況,讓學員快速熟悉R 語言程式設計環境。

2 R 語言簡介:

  2.1 R 語言是什麼?

  R是統計領域廣泛使用的誕生於1980年左右的S語言的一個分支。可以認為R是S語言的一種實現。而S語言是由AT&T貝爾實驗室開發的一種

  用來進行資料探索、統計分析和作圖的解釋型語言。R 是基於S語言的一個GNU專案,所以也可以當作S語言的一種實現,通常用S語言編寫

  的程式碼都可以不作修改的在R環境下執行。 

  R 前世今生

 2.2 R 語言功能

  R 功能包括:資料儲存和處理系統;陣列運算工具(其向量、矩陣運算方面功能尤其強大);完整連貫的統計分析工具;優秀的統計製圖

  功能;簡便而強大的程式語言:可操縱資料的輸入和輸出,可實現分支、迴圈,使用者可自定義功能。

 2.3 R 語言安裝

  R 語言的安裝包可以在CRAN(Comprehensive R Archive Network)下載:https://cran.rstudio.com/

  該網站提供Linux、Mac OS X 和Windows 三個版本的安裝包,目前面向Windows的版本是3.2.2,大小約62.3 MB。

  R-1

  R語言預設編譯環境如圖:

  R-2

  介面相對簡陋,一般不直接採用R語言預設編譯環境來開發。較為好看的IDE有RStudio、Tinn-R、Rattle 等。我們的課程所使用的IDE

3 R 語言基礎

  3.1 R 語言的包

    函式是R語言進行計算的核心,而包就是R函式、資料、預編譯程式碼以一種定義完善的格式組成的集合。計算機上儲存包的目錄為庫

    (library)。函式.libpaths( ) 能夠顯示庫所在的位置,函式library( ) 則可以顯示有哪些包。

    R 語言的很多功能都是通過包的下載和呼叫來實現的,R 語言是開源的,各種功能的包的數量都在迅速增加,目前已經有超過5000

    多個可供呼叫的包了,這些包提供了橫跨各種領域、數量驚人的新功能,除了統計上的應用之外,還包括分析地理資料、處理蛋白質

    質譜,甚至是心理測驗分析等功能。

    3.1.1 R 語言基礎包

    在安裝時預裝了以下幾個基礎包:

      • base:R 中基礎的軟體包,包含基礎的R 函式使得R 函式作為一門可算術,輸入/輸出,基本程式設計支援的語言。

      • datasets: R 自帶的資料包,裡面的資料結構有包括矩陣,向量,資料框等,資料型別也比較豐富。

      • utils:包裡面包含了一系列的效用函式。

      • grDevices:R 中基礎繪圖工具包,提供調整圖形顏色和字型的功能。

      • graphics:R 中的基礎繪圖工具包。

      • stats:R 中統計函式的擴充套件包,可實現各種不同型別的資料彙總統計資料計算。

      • methods:R 中正式為R 物件和其他程式設計工具定義方法和類別的擴充套件包。

    3.1.2 擴充套件包

    內建的基本包提供了R 語言核心運算的基礎,但是一般不能滿足解決實際問題的需要。為此,許多統計以及金融、生物相關應用領域

    的研究人員編寫了大量的擴充套件包,來有針對性地處理這些具體問題。這裡我們將簡單介紹幾個常用包,在接下來的課程中也會大量

    運用這些包內的相關函式。

    安裝和載入擴充套件包方法:

    install.packages("xts")安裝擴充套件包,library(xts)載入擴充套件包

    常用的擴充套件包有:RODBC(資料庫連線用的包)、forecast(預測演算法採用的包)、ggplot2(畫圖採用的包)...

  3.2 R 語言資料型別

  R 語言中的資料可以分為幾個主要的資料型別:

   • 數值型(Numeric):實數,可以寫成整數(Integers),小數(Decimal Fractions),或是科學記數(Scientific Notation)的方式。

   • 邏輯型(Logical):僅含有T(TRUE)或F(FALSE)兩種值。

   • 字元型(Character):夾在雙引號""或單引號''之間的字串,如"RStudio"。

   • 複數型(Complex):含有虛數,可以表示為a+bi 。

   • 原型(Raw):以二進位制儲存。

   • 缺失(Missing Value):NA(Not Available 的縮寫)。

   資料型別強制轉換函式:as.numeric(),as.character(),as.factor()...可以用mode()函式看物件的資料型別。

  3.3 R 語言資料結構

  R 語言中有六種基礎的資料結構,即向量(vector)、矩陣(matrix)、陣列(array)、因子(factor)、列表(list)和資料框(data.frame)。

    3.3.1 向量vector

    由相同資料型別的元素組成的序列,相當於一維陣列,如:

    x <- c(1,2,3,4,5) 是數值型向量;

    x <- c("a","b") 是字元型向量;

    x <- c(TRUE,FALSE) 是邏輯型向量。

    c表示連線,是英文concatenate的首字母,其它生成向量的函式還有seq(),rep()。

    seq的英文全寫是sequence,產生的是一個有規律的序列;rep的英文全寫是replicate,作用是複製序列,產生重複的序列。

    3.3.2 矩陣matrix

    將資料用行和列排列,相當於二維陣列,其元素必須是相同的資料型別。

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

    nrow是矩陣的行數,ncol 是矩陣的列數,byrow=FALSE 引數則說明矩陣在R 中預設是按照列儲存的

    3.3.3 陣列array

    所含元素的資料型別相同;可看作是向量和矩陣的推廣,一維陣列就是向量,二維陣列就是矩陣,其索引方式和矩陣一樣

    array(1:24, c(4,3,2))生成一個4*3*2 的三維陣列

    3.3.4 因子factor

    代表變數的不同可能的水平,因子可以有大小區分,也可以沒有。

    3.3.5 列表list

    列表中的物件又稱為它的分量,每個分量可以是不同的資料型別(不同於向量、矩陣和陣列),也可以有不同的長度。

    其索引方式遵循先分量再元素的順序,如L[[1]][2] 表示列表第一個分量第二個元素。

    x <- c(1,3)

    y <- c("a","b")

    z <- list(x,y)

    3.3.6 資料框dataframe

    資料框每列是一個變數,每行是一個觀測。資料框是R 語言特有的資料型別,也是進行統計分析最為有用的資料型別。

    相比於列表,資料框的格式更為規整,也更接近我們常見的統計表的形式。同時它還有如下限制:(1)分量必須是向量(數值,字

    符,邏輯),因子,數值矩陣,列表或者其他資料框;(2)數值向量、邏輯值、因子保持原有格式,而字元向量會被強制轉換成因子

    並且它的水平就是向量中出現的獨立值;(3)在資料框中以變數形式出現的向量結構必須長度一致,矩陣結構必須有一樣的行數。

4 R 資料輸入與寫出

  4.1 scan()

  函式:scan(file = "", what = , sep = " " ......)

  注意點:(1)scan 讀入的資料生成向量型別(也就是說讀入的資料的資料型別必須相同);(2)直接呼叫scan()可以從鍵盤輸入數

  據,最後不輸入資料並按回車則結束輸入。

  4.2 read.table()

  該函式是我們讀取小型文字檔案資料最為常用的方法。它的引數眾多,可以對資料過程進行詳細的控制。

  讀入:read.table(file,header=FALSE,sep="",quote="\"",stringsAsFactors=TRUE,row.names,col.names,na.strings

  = "NA",nrows = -1,skip = 0,colClasses = NA)      • file:指定讀入的檔案,或者檔案所在地址;

  • header:是一個表明首行是否包含了變數名的邏輯值(TRUE or FALSE), 是否讀入列名,預設是FALSE, 不讀入;

  • sep:來進行指定分隔符:讀入的資料要求有規則的分隔符,常用的有:空格、TAB(\t 來表示)和逗號(,);

  • quote:指定用於包圍字元型資料的字元,預設為引號;

  • stringsAsFactors:是否字元轉化成因子,預設是true;

  • row.names:指定各行的名稱;

  • col.names:指定列的名稱,如果讀入是檔案沒有頭,可以指定;

  • na.strings:代表缺失資料的值轉換為NA;

  • nrows:讀入的最大行數,如果為負值或其他不適當的值則會被忽略,這裡預設為-1,實際表示不做限定的意思;

  • skip:從檔案第幾行開始讀入資料;

  • colClasses:填入一個向量,指定列的資料型別格式為character,numeric,factor 等型別;

  寫出:write.table(x,file="path",row.names=TRUE)

  • x: 待被寫出來的資料

  • file = ”data”:寫出資料所要儲存的路徑

  • rownames=TRUE 是否保留行標,預設是保留行標

  4.3 read.csv()/write.csv()

  csv 檔案是除txt檔案外另一個常用的資料檔案型別,一般讀取xlsx檔案時會先匯出為csv檔案再讀取。csv檔案預設以逗號分隔。

  函式:read.csv(file="path",header=TRUE)  write.csv(x,file="path",row.names=TRUE)

  4.4 連線資料庫

  連線資料庫的詳細過程參考:CSDN部落格

  主要記住兩條命令:odbcConnect(dsn,uid="",pwd="") sqlQuery(channel,query) 在此不做詳解

5 R 選取資料子集

  5.1 向量資料選取

  索引向量的格式是向量1[向量2],返回的結果是向量2從向量1中索引出的元素。

  y[c(1,3)] 是指從y中篩選儲第1個元素和第3個元素,y[2:4]指的是從y中篩選從2到4的元素。

  which()函式也可以進行篩選,如y<-c(1,3,4,5)   which(y>3)會輸出4,5

  負數的下標代表我們想把相應的元素剔除,如y[-2]代表晒出y向量的第二個元素

  5.2 矩陣資料選取

  x[2,] 篩選出矩陣x 的第二行元素,x[,2] 篩選出矩陣x 的第二列元素,x[1,4] 篩選出矩陣x的第一行第四列元素,x[1,c(4,5)] 篩

  選出矩陣x 第一行的第四和第五列元素。

  5.3 資料框資料選取

  資料框元素篩選的方法比較豐富,可以如向量或者矩陣用括號[ ],列表[[ ]] 進行下標篩選,也可以用$篩選

6 R 條件操作和迴圈

  6.1 條件操作

  條件操作和Java語言完全一致。if(_expr1) { _expr2 } else { _expr3 }

  R中有一個ifelse(condition,a,b)函式,類似於Java的三元表示式,不同點在於該函式產生一個向量,如果condition[i]為真,則對

  應a[i]元素,否則對應b[i]元素,組成一個向量。

  6.2 迴圈操作

  • for迴圈:for(i in 1:3) { ... }

  • while迴圈:while(i>0) { ... }

  • repeat迴圈:該迴圈較少使用。break是終止該迴圈的唯一方式

7 R 自定義函式

  7.1 定義方式

  GetProfit <- function(parameter1,parameter2=3) {

   return(parameter1+parameter2)

  }

  其中,parameter1是引數,parameter2=3表示parameter2預設為3;return()必須要有括號,如果沒有return,則返回最後一個表達

  式的值。

  7.2 函式內賦值注意點

  在函式內部的<-賦值是區域性變數,只在函式內部有效,如果要在函式內部進行全域性賦值,則需要使用超賦值<<-assign()

 至此,R基礎部分告一段落,當然這裡講的只是冰山一角,還有日期操作,字串操作,畫圖等等都未講到,如需深入,可以看看R語言實戰R語言程式設計藝術等。

一些技巧:

1.設定下載的擴充套件包的位置:.libPaths()用來檢視下載的擴充套件包的位置  .libPaths=("C:/R/library")

2.自動安裝並載入package:if (!require(RODBC)) install.packages('RODBC',repos="http://mirrors.opencas.cn/cran/")

相關推薦

R語言快速入門

R 語言基礎 1 引言:  R 語言是什麼?R 語言何以在短短几年的時間內佔領統計、金融、生物、心理學等幾乎所有的數量分析領域?R 語言在資料處理上有著  SAS、SPSS 等統計軟體無法比擬的靈活性,這也是我們要以R 語言作為研究工具主要原因。在課程的開始部分我們將簡要介

R語言快速入門_函式入門

存在a.R裡面的指令碼檔案  oddcount<-function(x){   k<-0   for(n in x){     if(n%%2==1) k<-k+1    }    return(k)   }  如何呼叫 第一步:找到a.R檔案 1) s

如何R語言快速上手入門

r語言R語言快速上手入門課程學習網址:http://www.xuetuwuyou.com/course/196課程出自學途無憂網:http://www.xuetuwuyou.com課程簡介本教程深入淺出地講解如何使用R語言玩轉數據。課程中涵蓋R語言編程的方方面面,內容涉及R對象的類型、R的記號體系和環境系統、

C語言快速入門一:win10系統環境搭建

atomic rap main b-s 驗證 完成 try enable -o 0、搭建環境:WIN10 64位 1.下載minGW.zip編譯器 2.解決上述文件,配置環境變量 3.配置變成後驗證:打開cmd命令行,輸入gcc -v 提示以下內容,說明編譯器安裝成功 D:

go語言快速入門:Web應用的HelloWorld(11)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

R語言統計入門課程推薦——生物科學中的資料分析Data Analysis for the Life Sciences

Data Analysis for the Life Sciences是哈佛大學PH525x系列課程——生物醫學中的資料分析(PH525x series - Biomedical Data Science ),課程全部採用R語言進行統計分析理論教學與實戰。教材採用Rmarkdo

go語言快速入門:目錄

簡介(1) 第一個HelloWorld(2) 詞法基礎(3) 資料型別使用例(4) 資料型別使用例(5) 內建函式(6) 流程控制(7) IPC之管道通訊(8) IPC之Socket(9) Web開發框架(10) We

go語言快速入門 template模板 12

使用過AngularJS應該都會對ng-model的方式印象深刻,類似於Spring的值繫結,使用起來非常的方便。而go的標準庫中也有相關的功能為Web開發提供簡單但卻有非常有用的功能,這就是template。本文將通過兩個簡單的例子來講解一下如何使用go語言中的template。 template

go語言快速入門 IPC之管道通訊 8

熟悉Unix/C程式設計的應該對IPC也非常的熟悉,多程序之間的通訊主要的手段有管道/訊號量/共享記憶體/Socket等,而管道作為父子程序間進行少量資料傳遞的有效手段也得到了廣泛的應用,在這篇文章中我們來看一下go語言中如何使用管道進行程序進行通訊。 管道的使用 在linux下,管道被非常廣泛

【 專欄 】- go語言快速入門

go語言快速入門 簡單介紹,從環境搭建到基本詞法語法,IPC通訊,Web程式設計,通過每個只需1-2分鐘的例子使得完全不懂go的有經驗的開發者在最快的時間內可以進行go的開發。

go語言快速入門:專案構建實踐(21)

在Unix/C的專案中,核心在於Makefile,一個架構怎樣,從Makefile中就可以看出來一些端倪。而在go中,可以使用gomake或者直接使用make都可以進行專案的設計。本文將從Unix/C專案中整理一部分常用的技巧,結合go語言自身特點,討論一下如何

go語言快速入門:簡介(1)

go語言成為2016年TIOBE年度語言,距離上次TIOBE年度語言至今已經過去7年,在過去的7年裡,go語言也得到了廣泛的應用,尤其是在開源領域,從docker到kubernetes都使用了go作為開發語言。在這系列文章中,我們將一起來由淺入深學習一下go語言

go語言快速入門:模板應用(15)

在go語言中,通過使用http包,可以非常簡單快速地建立一個Web應用。同時使用template包,可以很方便的進行資料替換,如果結合CSS就已經能夠進行簡單的開發了。這篇文章繼續使用簡單的例子來介紹CSS在巢狀template中的使用方式。 例項3 上

go語言快速入門:Web開發框架(10)

go語言進行開發Web開發,雖然使用go語言自身的包即可實現,但是需要快速開發的時候對初學者還是有一定的障礙。go語言有上千個開源的專案,而這其中也不乏面向web開發的框架,比如Revel/beego/iris等。 beego beego的開發者是中國的

go語言快速入門:使用靜態檔案(20)

在前面關於如何在go中使用BootStrap的時候,css和javascript檔案的引用我們使用了cdn。css和javascript可以繞過去不訪問本地的靜態檔案,但是關於工程所需要用到靜態檔案時應該如何處理這個問題,在這篇文章中我們將通過使用本地BootS

go語言快速入門 Web開發框架 10

go語言進行開發Web開發,雖然使用go語言自身的包即可實現,但是需要快速開發的時候對初學者還是有一定的障礙。go語言有上千個開源的專案,而這其中也不乏面向web開發的框架,比如Revel/beego/iris等。 beego beego的開發者是中國的astaxie,是受了tornado 和

go語言快速入門 自動化測試 17

在這篇文章中將會學習一下如何在go語言中使用testing包進行功能測試和效能測試。 自動化測試 正如Martin Fowler所說的”在你不知道如何測試程式碼之前,就不該編寫程式。而一旦你完成了程式,測試程式碼也應該完成。除非測試成功,你不能認為你編寫出了可以工作的程式”。測試在軟體開發中起到

go語言快速入門 測試覆蓋率 18

上篇文章討論瞭如何使用testing標準包進行自動化測試,在這篇文章中將進一步細化測試覆蓋率的視覺化確認。 測試覆蓋率 程式碼測試的覆蓋率分很多種,語句覆蓋/條件覆蓋等等,而在go中,測試覆蓋率是這樣定義的:Test coverage is a term that describes how m

go語言快速入門:template模板(12)

使用過AngularJS應該都會對ng-model的方式印象深刻,類似於Spring的值繫結,使用起來非常的方便。而go的標準庫中也有相關的功能為Web開發提供簡單但卻有非常有用的功能,這就是template。本文將通過兩個簡單的例子來講解一下如何使用go語言中

NodeMcu開發(二)--lua指令碼語言快速入門

NodeMcu是已lua為指令碼語言開發的, 是不是聽到又要學語言了, 就抓狂了???? 不是的, 其實我感覺只要學好了一門語言, 其他語言就是類似的, 觸類旁通, 經過一個小時的學習後, 發現lua挺像python的, 少說廢話, 來點實際的 lua語言詳細教程參考網站: 菜鳥教程 網址:ht