R語言前身是S語言,S語言是由AT&T Bell實(shí)驗(yàn)室的Rick Becker、John Chambers、Allan Wilks開發(fā)的一種用于進(jìn)行數(shù)據(jù)探索、統(tǒng)計(jì)飯呢西、作圖的解釋性語言。
最初S語言的實(shí)現(xiàn)版本主要是S-PLUS,S-PLUS是一個(gè)商業(yè)軟件,基于S語言由MathSoft公司的統(tǒng)計(jì)科學(xué)部進(jìn)一步完善。R語言最初由新西蘭大學(xué)的Ross Ihaka和Robert Gentleman開發(fā)。因?yàn)镽語言是基于S語言的一個(gè)GUN項(xiàng)目,所以也可以當(dāng)作S語言的一種實(shí)現(xiàn),通常使用S語言編寫的代碼可不不做修改地在R語言環(huán)境下運(yùn)行。
R語言是一套開源的數(shù)據(jù)分析解決方案,幾乎可以獨(dú)立完成數(shù)據(jù)處理、數(shù)據(jù)可視化、數(shù)據(jù)建模、模型評(píng)估等工作,而且可以完美配合其它工具進(jìn)行數(shù)據(jù)交互會(huì)。具體來說,R語言具有以下優(yōu)勢:
- R語言作為一種GNU項(xiàng)目開放了全部源代碼,用戶可以免費(fèi)下載使用和修改。
- R語言可以運(yùn)行在多種平臺(tái)上,包括Windows、UNIX、MacOS。
- R語言可以輕松地從各種類型的數(shù)據(jù)源導(dǎo)入數(shù)據(jù),包括文本文件、數(shù)據(jù)管理系統(tǒng)、統(tǒng)計(jì)系統(tǒng)乃至Hadoop、Spark等,同樣可以將數(shù)據(jù)輸出并寫入這些系統(tǒng)中。
- R語言內(nèi)置多種統(tǒng)計(jì)學(xué)及數(shù)據(jù)分析功能,因?yàn)橛蠸的血緣,所以R語言比其它統(tǒng)計(jì)學(xué)或數(shù)學(xué)專用的變成語言有更強(qiáng)大的面向?qū)ο蟮墓δ堋?/li>
- R語言擁有頂尖的制圖能力,不僅包括lattcie包、ggplot2包對復(fù)雜數(shù)據(jù)進(jìn)行可視化,更有rCharts包、recharts包、plotly包實(shí)現(xiàn)數(shù)據(jù)交互可視化,甚至可以利用功能強(qiáng)大的shiny包實(shí)現(xiàn)R與Web整合部署,構(gòu)建網(wǎng)頁應(yīng)用,幫助不懂CSS、HTML的用戶利用R快速搭建自己的數(shù)據(jù)分析APP應(yīng)用。
R語言也存在固有的缺點(diǎn),目前主要問題包括
- R語言是一種解釋性語言,和其它編程語言相比,速度略顯慢一些。隨著硬件和R自身的發(fā)展,這個(gè)問題已經(jīng)被慢慢弱化,如果能夠熟練運(yùn)用向量化運(yùn)算,可大大提高速度,使用R內(nèi)置的分析函數(shù)效率高很多,因?yàn)楹芏嗪瘮?shù)都是由C或Fortran編寫的。
- R所有的計(jì)算實(shí)際是基于內(nèi)存進(jìn)行的,這就意味著在處理數(shù)據(jù)過程中,數(shù)據(jù)必須完整地轉(zhuǎn)入內(nèi)存,這在處理小型數(shù)據(jù)是沒有任何問題的,但遇到大數(shù)據(jù)時(shí)就會(huì)變得很嚴(yán)重。但是這個(gè)問題也得到了一定的解決,利用并行包提升R的性能,或利用R結(jié)合Hadoop進(jìn)行大數(shù)據(jù)分析工作。
- 由于R語言的自由各種包的編寫者來自不同領(lǐng)域,所以一定程度上比較混亂,沒有統(tǒng)一的命名格式,參數(shù)格式不一,源代碼和文檔質(zhì)量良莠不齊。
下載安裝
- 下載地址 https://cran.r-project.org/mirrors.html
- R-3.6.2 Windows版本 https://cloud.r-project.org/bin/windows/base/R-3.6.2-win.exe
- R語言IDE https://rstudio.com/
RStudio
RStudio IDE只能用于R開發(fā),不能用它編寫其它語言的程序,但能得到一些R特有的功能。RStudio的好處是可以通過瀏覽器遠(yuǎn)程執(zhí)行,可以現(xiàn)在功能強(qiáng)大的服務(wù)器上運(yùn)行R,然后在手機(jī)上遠(yuǎn)程訪問而不會(huì)損失計(jì)算能力。
Rattle
Rattle是一個(gè)用于數(shù)據(jù)挖掘的R的圖形交互界面GUI,可用于快捷處理常見的數(shù)據(jù)挖掘問題。從數(shù)據(jù)的整理到模型的評(píng)價(jià),Rattle給出了完整的解決方案。Rattle和R平臺(tái)量好的交互性,為用戶使用R語言解決復(fù)雜問題開啟了方便之門。Rattle易學(xué)易用,不要求很多的R語言基礎(chǔ),如今已被廣泛地應(yīng)用于數(shù)據(jù)挖掘?qū)嵺`和教學(xué)之中。
在RStudio中若沒有安裝rattle包則出現(xiàn)下列錯(cuò)誤
> library(rattle)
Error in library(rattle) : 不存在叫‘rattle’這個(gè)名字的程輯包
RStudio安裝rattle包
> install.packages("RGtk2")
Warning message:
package ‘RGtk2’ is not available (for R version 3.6.2 Patched)
基本原因是此包被移除或者你的網(wǎng)根本打不開下載這個(gè)包的URL
在RStudio菜單的Tools>Global Options>Packages中,有一個(gè)CRAN mirror選項(xiàng),沒設(shè)置過的時(shí)候自動(dòng)選擇Global CDN,這是國外的鏡像地址,下載速度慢且容易發(fā)生上述錯(cuò)誤,可以下拉選擇China開頭的鏡像網(wǎng)站,選一個(gè)離自己近的就可以。

使用biocLite軟件對包進(jìn)行安裝
> source("http://bioconductor.org/biocLite.R")
#指定一個(gè)離你最近的國內(nèi)鏡像
> options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")
> biocLite("包名")
> install.packages("rattle", repos="http://rattle.togaware.com")
> library(rattle)
> rattle()
> install.packages("RGtk2")
trying URL 'https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/contrib/3.6/RGtk2_2.20.36.zip'
Content type 'application/zip' length 16558916 bytes (15.8 MB)
downloaded 15.8 MB
package ‘RGtk2’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\junchow\AppData\Local\Temp\Rtmp8IyEgQ\downloaded_packages
> install.packages("rattle");
The downloaded binary packages are in
C:\Users\junchow\AppData\Local\Temp\Rtmp8IyEgQ\downloaded_packages
> library(rattle)
Rattle: A free graphical interface for data science with R.
XXXX 5.3.0 Copyright (c) 2006-2018 Togaware Pty Ltd.
鍵入'rattle()'去輕搖、晃動(dòng)、翻滾你的數(shù)據(jù)。
完成Rattle成功后,Rattle的標(biāo)簽欄會(huì)集成數(shù)據(jù)導(dǎo)入、數(shù)據(jù)探索、數(shù)據(jù)檢驗(yàn)、數(shù)據(jù)轉(zhuǎn)化、數(shù)據(jù)建模、模型評(píng)估功能??赏ㄟ^鼠標(biāo)單擊的方式完成一整套數(shù)據(jù)挖掘工作,并利用Log日志查看每個(gè)操作的R腳本實(shí)現(xiàn),借此學(xué)習(xí)R語言的代碼規(guī)范及編寫。

快速入門
R語言是區(qū)分大小寫的及時(shí)性語言,程序內(nèi)置的函數(shù)可以滿足基本的數(shù)據(jù)分析需求。
例如:在命令行提示符后輸入一條指令1+1或一次性執(zhí)行腳本文件中的一組命令。R語言是解釋型語言,輸入命令后可以實(shí)時(shí)響應(yīng),類似計(jì)算器。如果R檢測到輸入的命令行未結(jié)束,會(huì)給出一個(gè)提示符+加號(hào),提示需要在下一行繼續(xù)輸入未完的命名,直到語法輸入完整為止。不然R會(huì)有unexpected end of inport的錯(cuò)誤提示。
> 1+
+
> 1+1
[1] 2
標(biāo)準(zhǔn)賦值
R語言的標(biāo)準(zhǔn)賦值符號(hào)是<-也可以使用=
例如:將序列1:10賦予給變量a
> a = 1:10
> a
[1] 1 2 3 4 5 6 7 8 9 10
> a<-1:5
> a
[1] 1 2 3 4 5
例如:計(jì)算1到5的算數(shù)平均數(shù),冒號(hào)會(huì)創(chuàng)建一個(gè)從第一個(gè)數(shù)字到第二個(gè)數(shù)字的序列,每個(gè)相隔為1,計(jì)算得到的序列稱為一個(gè)矢量。mean是計(jì)算算數(shù)平均值的函數(shù),括號(hào)內(nèi)的向量被稱為函數(shù)的參數(shù)。
> mean(1:10)
[1] 5.5
help
- 如果想要直到某個(gè)函數(shù)或數(shù)據(jù)集的信息可輸入一個(gè)問號(hào)
?加上函數(shù)名稱 - 如果想查找某個(gè)函數(shù)可輸入兩個(gè)問號(hào)
??后跟函數(shù)關(guān)鍵詞
例如:查看中位數(shù)函數(shù)median的幫助文檔
> ?median
> help("median")
> ??median
> help.search("median")
其中?median相當(dāng)于help("median"),??median相當(dāng)于help.search("median")。

默認(rèn)情況下,help只能查找已經(jīng)加載到內(nèi)存中擴(kuò)展包的函數(shù)和數(shù)據(jù)。如果想要查找未加載到內(nèi)存擴(kuò)展包中的函數(shù)和數(shù)據(jù),需要指定help函數(shù)的package參數(shù)所指向的具體包名和將try.all.package參數(shù)設(shè)置為TRUE。
例如:查找shiny包中的nunExample函數(shù)
> help("runExample")
No documentation for ‘runExample’ in specified packages and libraries:
you could try ‘??runExample’
> help("runExample", package="shiny")
Error in find.package(if (is.null(package)) loadedNamespaces() else package, :
there is no package called ‘shiny’
> help("runExample", try.all.packages=TRUE)
No documentation for ‘runExample’ in specified packages and libraries:
you could try ‘??runExample’
> ??runExample
appropos
使用appropos函數(shù)可以找出所有名字中含有關(guān)鍵字的函數(shù),只在載入的包中搜索。
> apropos("plot")
[1] ".rs.api.savePlotAsImage"
[2] ".rs.replayNotebookPlots"
[3] "assocplot"
[4] "barplot"
example
大多數(shù)函數(shù)已經(jīng) 有相應(yīng)的例子幫助了解函數(shù)的工作原理,可以通過example函數(shù)來查看。
> example("median")
median> median(1:4) # = 2.5 [even number]
[1] 2.5
median> median(c(1:3, 100, 1000)) # = 3 [odd, robust]
[1] 3
data
可通過data函數(shù)查看datasets包中的數(shù)據(jù)集

如果要查看本地安裝包的所有數(shù)據(jù)集可使用命令data(package=.packages(all.available=TRUE)進(jìn)行查看
> data(package=.packages(all.available=TRUE))
Warning messages:
1: In data(package = .packages(all.available = TRUE)) :
數(shù)據(jù)機(jī)從程序包'base'移到了程序包'datasets'
2: In data(package = .packages(all.available = TRUE)) :
數(shù)據(jù)機(jī)從程序包'stats'移到了程序包'datasets'
工作空間
工作空間workspace是當(dāng)前R的工作環(huán)境,存儲(chǔ)所有用戶定義的對象,諸如向量、矩陣、函數(shù)、數(shù)據(jù)框、列表、模型、圖形等。
例如:創(chuàng)建對象后查看當(dāng)前工作空間下的對象
安裝rCharts
> install.packages("devtools")
> library(devtools)
載入需要的程輯包:usethis
> install_github('ramnathv/rCharts')
WARNING: Rtools is required to build R packages, but is not currently installed.
Please download and install Rtools custom from http://cran.r-project.org/bin/windows/Rtools/.
Downloading GitHub repo ramnathv/rCharts@master
ramnathv-rCharts-479a4f9/inst/apps/leaflet_chloropleth/data/regions_gcs.js: truncated gzip input
tar.exe: Error exit delayed from previous errors.
Error: Failed to install 'rCharts' from GitHub:
Does not appear to be an R package (no DESCRIPTION)
In addition: Warning messages:
1: In utils::untar(tarfile, ...) :
‘tar.exe -xf "C:\Users\junchow\AppData\Local\Temp\Rtmp8IyEgQ\file64485266372c.tar.gz" -C "C:/Users/junchow/AppData/Local/Temp/Rtmp8IyEgQ/remotes644847884327"’ returned error code 1
2: In system(cmd, intern = TRUE) :
running command 'tar.exe -tf "C:\Users\junchow\AppData\Local\Temp\Rtmp8IyEgQ\file64485266372c.tar.gz"' had status 1
tidyverse
R包是函數(shù)、數(shù)據(jù)、文檔的集合,是對R基礎(chǔ)功能的擴(kuò)展,學(xué)會(huì)如何使用R包才能真正掌握R語言的精華。tidyverse中的R包有著同樣的數(shù)據(jù)處理與編程理念,他們的設(shè)計(jì)從根本上是為了協(xié)同工作。
安裝tidyverse
> install.packages("tidyverse")
使用library函數(shù)加載R包
> library(tidyverse)
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
<U+2713> tibble 2.1.3 <U+2713> dplyr 0.8.3
<U+2713> tidyr 1.0.0 <U+2713> stringr 1.4.0
<U+2713> readr 1.3.1 <U+2713> forcats 0.4.0
<U+2713> purrr 0.3.3
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
檢查更新
> tidyverse_update()
All tidyverse packages up-to-date
數(shù)據(jù)對象
R語言擁有很多存儲(chǔ)數(shù)據(jù)的對象類型,包括向量、矩陣、數(shù)組、數(shù)據(jù)框、列表。它們在存儲(chǔ)數(shù)據(jù)的類型、創(chuàng)建方式、結(jié)構(gòu)復(fù)雜度,以及用于定位和訪問其中個(gè)別元素的標(biāo)記等方面有所不同。
數(shù)據(jù)類型
R語言中的數(shù)據(jù)類型主要包括數(shù)值型(numeric)、邏輯型(logical)、日期型(date)、字符型(character)、復(fù)數(shù)型(complex)、原味性(raw 二進(jìn)制形式保存數(shù)據(jù))。此外可能是缺省值(NA)和空值(NULL)。其中最常用的4種類型分別是數(shù)值型、邏輯型、日期型、字符型。
對象種存儲(chǔ)的數(shù)據(jù)類型可以使用mode()函數(shù)進(jìn)行查看
判別和轉(zhuǎn)換數(shù)據(jù)對象類型的函數(shù)
| 數(shù)據(jù)類型 | 判別函數(shù) | 轉(zhuǎn)換函數(shù) |
|---|---|---|
| 數(shù)值型(numeric) | is.numeric() | as.numeric() |
| 字符型(character) | is.character() | as.character() |
| 邏輯型(logical) | is.logical() | as.logical() |
| 整數(shù)型(integer) | is.integer() | as.integer() |
| 復(fù)數(shù)型(complex) | is.complex() | as.complex() |
| 空值(NULL) | is.null() | as.null() |
R語言數(shù)據(jù)對象的基本屬性是長度和類型屬性,可使用length()函數(shù)讀取對象的長度,通過mode()函數(shù)讀取對象的類型。
向量vector
- R語言最基礎(chǔ)的數(shù)據(jù)對象是向量,向量是以一維數(shù)組的方式管理數(shù)據(jù)。
- 多數(shù)情況下都會(huì)使用長度大于1的向量,可使用
c()函數(shù)(combine 合并)和對應(yīng)參數(shù)來創(chuàng)建一個(gè)向量。 - 向量的數(shù)據(jù)類型可以是字符型、邏輯型(TRUE/T、FALSE/F)、數(shù)值型、復(fù)數(shù)型。
- 向量的長度是含有元素的個(gè)數(shù),可使用
length()函數(shù)進(jìn)行讀取。
例如:創(chuàng)建數(shù)值型向量
> (v<-c(1,2,3,4,5,6,7))
[1] 1 2 3 4 5 6 7
> mode(v)
[1] "numeric"
> length(v)
[1] 7
例如:創(chuàng)建字符型向量
> (v = c("hello", "world"))
[1] "hello" "world"
> mode(v)
[1] "character"
> length(v)
[1] 2
例如:創(chuàng)建邏輯型向量
> (v<-c(TRUE, FALSE, T, F))
[1] TRUE FALSE TRUE FALSE
> mode(v)
[1] "logical"
> length(v)
[1] 4
- 向量的元素必須具有相同數(shù)據(jù)類型,若不是則會(huì)強(qiáng)行執(zhí)行類型轉(zhuǎn)換。
例如:數(shù)值型 + 字符型 = 字符串
> v1 = c(1,2,3)
> v2 = c("a", "b", "c")
> v = c(v1, v2)
> v
[1] "1" "2" "3" "a" "b" "c"
> mode(v)
[1] "character"
> length(v)
[1] 6
例如:數(shù)值型 + 邏輯型= 數(shù)值型
> v1 = c(1,2,3)
> v2 = c(T,F,T)
> v = c(v1, v2)
> v
[1] 1 2 3 1 0 1
> mode(v)
[1] "numeric"
> length(v)
[1] 6
例如:字符型 + 邏輯型 = 字符型
> v1 = c("a", "b", "c")
> v2 = c(T, T, F)
> v = c(v1, v2)
> v
[1] "a" "b" "c" "TRUE" "TRUE"
[6] "FALSE"
> mode(v)
[1] "character"
> length(v)
[1] 6
向量運(yùn)算
R語言是矢量化語言,其中最強(qiáng)大之一的函數(shù)的向量化,意味著操作會(huì)自動(dòng)應(yīng)用于向量的每個(gè)元素,而無需遍歷。
例如:創(chuàng)建1~10序列組成的向量,對向量種每個(gè)元素進(jìn)行開方根。
> v = seq(1:10)
> (round(sqrt(v), 2))
[1] 1.00 1.41 1.73 2.00 2.24 2.45 2.65 2.83 3.00 3.16
向量的四則運(yùn)算
例如:向量相加
> rm(list = ls())
> v1 = c(1,2,3)
> v2 = c(1.1, 2.2, 3.3)
> (v1+v2)
[1] 2.1 4.2 6.3
- 如果向量的長度不同則R語言會(huì)利用循環(huán)規(guī)則重復(fù)較短的向量元素,直到得到向量長度于較長向量的長度相同。
> rm(list = ls())
> (v1 <- c(1,2,3,4,5,6,7))
[1] 1 2 3 4 5 6 7
> (v2 <- c(10, 20))
[1] 10 20
> (v <- v1 + v2)
[1] 11 22 13 24 15 26 17
Warning message:
In v1 + v2 :
longer object length is not a multiple of shorter object length
警告:長對象的長度不是短對象長度的整數(shù)倍
生成數(shù)列
R語言中使用冒號(hào):自動(dòng)生成增量為1或-1的數(shù)列
例如:生成1到10增量為1的等差數(shù)列
> rm(list = ls())
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
例如:生成10到1增量為-1的等差數(shù)列
> 10:1
[1] 10 9 8 7 6 5 4 3 2 1
對于增量不為1的數(shù)列可使用seq()序列函數(shù)生成
seq(from=1, to=1, by=((to-from) / (length.out-1)), length.out=NULL, along.with=NULL, ...)
| 參數(shù) | 描述 |
|---|---|
| from | 等差數(shù)列的首項(xiàng)數(shù)值,默認(rèn)為1。 |
| to | 等差數(shù)列的尾項(xiàng)數(shù)值,默認(rèn)為1。 |
| by | 等差數(shù)值 |
| length.out | 產(chǎn)生向量的長度,可簡寫為len |
如果只給出首項(xiàng)和尾項(xiàng)數(shù)據(jù)則等差數(shù)值by將自動(dòng)匹配為1或-1
> seq(1, 10)
[1] 1 2 3 4 5 6 7 8 9 10
> seq(10, 1)
[1] 10 9 8 7 6 5 4 3 2 1
> seq(0, -10)
[1] 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
如果給出首項(xiàng)和尾項(xiàng)以及長度則會(huì)自動(dòng)計(jì)算等差數(shù)值
> seq(1, 10, length.out=5)
[1] 1.00 3.25 5.50 7.75 10.00
> seq(1, 10, length.out=4)
[1] 1 4 7 10
如果給出首項(xiàng)和等差數(shù)值和長度則會(huì)自動(dòng)計(jì)算尾項(xiàng)
> seq(1, by=2, length.out=10)
[1] 1 3 5 7 9 11 13 15 17 19
重復(fù)數(shù)列
R語言中的rep()函數(shù)為重復(fù)函數(shù)可將向量重復(fù)若干次
rep(x, time=1, each=1, length.out=1)
| 參數(shù) | 描述 |
|---|---|
| x | 預(yù)重復(fù)的序列 |
| times | 重復(fù)次數(shù) |
| each | 設(shè)置向量元素先重復(fù)的次數(shù) |
| length.out | 設(shè)置重復(fù)數(shù)列的長度,可簡寫為len |
> rep(1:3)
[1] 1 2 3
> rep(1:3, times=2)
[1] 1 2 3 1 2 3
> rep(1:3, each=2)
[1] 1 1 2 2 3 3
> rep(1:3, c(2, 1, 2))
[1] 1 1 2 3 3
> rep(1:3, times=2, len=4)
[1] 1 2 3 1
如果設(shè)置的長度大于數(shù)列長度則會(huì)以循環(huán)補(bǔ)齊的方式補(bǔ)全
> rep(1:3, times=2, len=8)
[1] 1 2 3 1 2 3 1 2
字母序列
R語言中的letters和LETTERS函數(shù)可用于生成26個(gè)英文字母的小寫和大寫字符序列
> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n"
[15] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
> LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
[15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
向量索引
R語言中若需要訪問向量中部分或個(gè)別元素可通過在向量名稱后跟方括號(hào)[]中添加向量索引的方式來實(shí)現(xiàn)。
- 向量的初始位置為1
- 向量索引會(huì)根據(jù)元素在向量中的位置挑選中元素
- 向量索引為負(fù)數(shù)表示排除向量中相應(yīng)位置的元素并返回其它位置的元素
- 可使用向量索引來選擇多個(gè)元素
- 可使用邏輯向量條件選擇元素
- 可使用表達(dá)式選擇元素
例如:從5個(gè)隨機(jī)數(shù)中挑選出位置為1, 3, 5的三個(gè)元素
> rm(list = ls())
> set.seed(1234)
> x = rnorm(5)
> x
[1] -1.2070657 0.2774292 1.0844412 -2.3456977 0.4291247
> x[c(1,3,5)]
[1] -1.2070657 1.0844412 0.4291247
例如:從5個(gè)隨機(jī)數(shù)中刪除第1、第2、第3個(gè)
> rm(list = ls())
> set.seed(1234)
> (x = rnorm(5))
[1] -1.2070657 0.2774292 1.0844412 -2.3456977 0.4291247
> x[c(-1, -2, -3)]
[1] -2.3456977 0.4291247
例如:保留首位刪除中間
> rm(list = ls())
> set.seed(1234)
> (x = rnorm(5))
[1] -1.2070657 0.2774292 1.0844412 -2.3456977 0.4291247
> x[c(T,F,F,F,T)]
[1] -1.2070657 0.4291247
禁止混合使用正負(fù)值
> rm(list = ls())
> set.seed(1234)
> (v = rnorm(5))
[1] -1.2070657 0.2774292 1.0844412 -2.3456977 0.4291247
> v[c(1, -2)]
Error in v[c(1, -2)] : only 0's may be mixed with negative subscripts
例如:提取所有整數(shù)的元素
> rm(list = ls())
> set.seed(1234)
> (v = rnorm(5))
[1] -1.2070657 0.2774292 1.0844412 -2.3456977 0.4291247
> v>0
[1] FALSE TRUE TRUE FALSE TRUE
> v[v>0]
[1] 0.2774292 1.0844412 0.4291247
R語言中的which()函數(shù)將返回邏輯向量中為真的位置
例如:找出向量中大于50的元素的索引位置
-
sample()函數(shù)用于對序列繼續(xù)寧無放回隨機(jī)抽取多個(gè)元素組成向量 -
which()函數(shù)用于從邏輯向量中獲取條件為真的元素的索引位置 -
which.min()函數(shù)用于從邏輯向量中獲取元素最小值的索引位置 -
which.max()函數(shù)用于從邏輯向量中獲取元素最大值的索引位置
> rm(list = ls())
> set.seed(1234)
> (v = sample(1:100, 10))
[1] 28 80 22 9 5 38 16 4 86 90
> which(v>50)
[1] 2 9 10
> which.min(v)
[1] 8
> which.max(v)
[1] 10
矩陣maxtrix
R語言中利用矩陣matrix描述二維數(shù)組,矩陣和向量相似,其內(nèi)部元素可以是實(shí)數(shù)、復(fù)數(shù)、字符、邏輯值等數(shù)據(jù)。
矩陣matrix使用兩個(gè)下標(biāo)來訪問元素,比如m[i,j]表示矩陣m中第i行第j列的數(shù)據(jù)。
R語言中使用matrix()函數(shù)以向量形式輸入矩陣中的元素,使用ncol和nrow屬性設(shè)置矩陣的列數(shù)和行數(shù),從而創(chuàng)建一個(gè)矩陣。
> rm(list = ls())
> set.seed(1234)
> (v = sample(1:100, 16))
[1] 4 100 21 40 84 56 67 93 5 66 47 97 96 48 3 41
> (m = matrix(v, nrow=4, ncol=4))
[,1] [,2] [,3] [,4]
[1,] 4 84 5 96
[2,] 100 56 66 48
[3,] 21 67 47 3
[4,] 40 93 97 41
默認(rèn)舉證是按列填充,若需按行填充則需設(shè)置byrow參數(shù)為真。
> (v = seq(1:10))
[1] 1 2 3 4 5 6 7 8 9 10
> (m = matrix(v, ncol=5, nrow=2, byrow=T))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
數(shù)組 array
R語言中利用array描述多維數(shù)組,多維數(shù)組有一個(gè)特征屬性叫做dim維數(shù)向量,dim維數(shù)向量的長度是多維數(shù)組的維數(shù),dim內(nèi)的元素對應(yīng)維度的長度。矩陣只是數(shù)組的特殊情況,因?yàn)樗痪哂袃蓚€(gè)維度。