R

R語言前身是S語言,S語言是由AT&T Bell實驗室的Rick Becker、John Chambers、Allan Wilks開發(fā)的一種用于進行數(shù)據(jù)探索拌消、統(tǒng)計飯呢西、作圖的解釋性語言安券。

最初S語言的實現(xiàn)版本主要是S-PLUS墩崩,S-PLUS是一個商業(yè)軟件,基于S語言由MathSoft公司的統(tǒng)計科學(xué)部進一步完善侯勉。R語言最初由新西蘭大學(xué)的Ross Ihaka和Robert Gentleman開發(fā)鹦筹。因為R語言是基于S語言的一個GUN項目,所以也可以當(dāng)作S語言的一種實現(xiàn)址貌,通常使用S語言編寫的代碼可不不做修改地在R語言環(huán)境下運行铐拐。

R語言是一套開源的數(shù)據(jù)分析解決方案徘键,幾乎可以獨立完成數(shù)據(jù)處理、數(shù)據(jù)可視化遍蟋、數(shù)據(jù)建模吹害、模型評估等工作,而且可以完美配合其它工具進行數(shù)據(jù)交互會虚青。具體來說它呀,R語言具有以下優(yōu)勢:

  • R語言作為一種GNU項目開放了全部源代碼,用戶可以免費下載使用和修改棒厘。
  • R語言可以運行在多種平臺上纵穿,包括Windows、UNIX奢人、MacOS谓媒。
  • R語言可以輕松地從各種類型的數(shù)據(jù)源導(dǎo)入數(shù)據(jù),包括文本文件何乎、數(shù)據(jù)管理系統(tǒng)句惯、統(tǒng)計系統(tǒng)乃至Hadoop、Spark等支救,同樣可以將數(shù)據(jù)輸出并寫入這些系統(tǒng)中抢野。
  • R語言內(nèi)置多種統(tǒng)計學(xué)及數(shù)據(jù)分析功能,因為有S的血緣搂妻,所以R語言比其它統(tǒng)計學(xué)或數(shù)學(xué)專用的變成語言有更強大的面向?qū)ο蟮墓δ堋?/li>
  • R語言擁有頂尖的制圖能力蒙保,不僅包括lattcie包辕棚、ggplot2包對復(fù)雜數(shù)據(jù)進行可視化欲主,更有rCharts包、recharts包逝嚎、plotly包實現(xiàn)數(shù)據(jù)交互可視化扁瓢,甚至可以利用功能強大的shiny包實現(xiàn)R與Web整合部署,構(gòu)建網(wǎng)頁應(yīng)用补君,幫助不懂CSS引几、HTML的用戶利用R快速搭建自己的數(shù)據(jù)分析APP應(yīng)用。

R語言也存在固有的缺點挽铁,目前主要問題包括

  • R語言是一種解釋性語言,和其它編程語言相比,速度略顯慢一些邪锌。隨著硬件和R自身的發(fā)展道偷,這個問題已經(jīng)被慢慢弱化,如果能夠熟練運用向量化運算更扁,可大大提高速度盖腕,使用R內(nèi)置的分析函數(shù)效率高很多赫冬,因為很多函數(shù)都是由C或Fortran編寫的。
  • R所有的計算實際是基于內(nèi)存進行的溃列,這就意味著在處理數(shù)據(jù)過程中劲厌,數(shù)據(jù)必須完整地轉(zhuǎn)入內(nèi)存,這在處理小型數(shù)據(jù)是沒有任何問題的听隐,但遇到大數(shù)據(jù)時就會變得很嚴(yán)重补鼻。但是這個問題也得到了一定的解決,利用并行包提升R的性能遵绰,或利用R結(jié)合Hadoop進行大數(shù)據(jù)分析工作辽幌。
  • 由于R語言的自由各種包的編寫者來自不同領(lǐng)域,所以一定程度上比較混亂椿访,沒有統(tǒng)一的命名格式乌企,參數(shù)格式不一,源代碼和文檔質(zhì)量良莠不齊成玫。

下載安裝

RStudio

RStudio IDE只能用于R開發(fā)加酵,不能用它編寫其它語言的程序,但能得到一些R特有的功能哭当。RStudio的好處是可以通過瀏覽器遠程執(zhí)行猪腕,可以現(xiàn)在功能強大的服務(wù)器上運行R,然后在手機上遠程訪問而不會損失計算能力钦勘。

Rattle

Rattle是一個用于數(shù)據(jù)挖掘的R的圖形交互界面GUI陋葡,可用于快捷處理常見的數(shù)據(jù)挖掘問題。從數(shù)據(jù)的整理到模型的評價彻采,Rattle給出了完整的解決方案腐缤。Rattle和R平臺量好的交互性,為用戶使用R語言解決復(fù)雜問題開啟了方便之門肛响。Rattle易學(xué)易用岭粤,不要求很多的R語言基礎(chǔ),如今已被廣泛地應(yīng)用于數(shù)據(jù)挖掘?qū)嵺`和教學(xué)之中特笋。

在RStudio中若沒有安裝rattle包則出現(xiàn)下列錯誤

> library(rattle)
Error in library(rattle) : 不存在叫‘rattle’這個名字的程輯包

RStudio安裝rattle包

> install.packages("RGtk2")
Warning message:
package ‘RGtk2’ is not available (for R version 3.6.2 Patched) 

基本原因是此包被移除或者你的網(wǎng)根本打不開下載這個包的URL

在RStudio菜單的Tools>Global Options>Packages中剃浇,有一個CRAN mirror選項,沒設(shè)置過的時候自動選擇Global CDN猎物,這是國外的鏡像地址虎囚,下載速度慢且容易發(fā)生上述錯誤,可以下拉選擇China開頭的鏡像網(wǎng)站蔫磨,選一個離自己近的就可以淘讥。

包的鏡像地址設(shè)置

使用biocLite軟件對包進行安裝

> source("http://bioconductor.org/biocLite.R")
#指定一個離你最近的國內(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()'去輕搖、晃動质帅、翻滾你的數(shù)據(jù)适揉。

完成Rattle成功后留攒,Rattle的標(biāo)簽欄會集成數(shù)據(jù)導(dǎo)入、數(shù)據(jù)探索嫉嘀、數(shù)據(jù)檢驗炼邀、數(shù)據(jù)轉(zhuǎn)化、數(shù)據(jù)建模剪侮、模型評估功能拭宁。可通過鼠標(biāo)單擊的方式完成一整套數(shù)據(jù)挖掘工作瓣俯,并利用Log日志查看每個操作的R腳本實現(xiàn)杰标,借此學(xué)習(xí)R語言的代碼規(guī)范及編寫。

Rattle

快速入門

R語言是區(qū)分大小寫的及時性語言彩匕,程序內(nèi)置的函數(shù)可以滿足基本的數(shù)據(jù)分析需求腔剂。

例如:在命令行提示符后輸入一條指令1+1或一次性執(zhí)行腳本文件中的一組命令。R語言是解釋型語言驼仪,輸入命令后可以實時響應(yīng)掸犬,類似計算器。如果R檢測到輸入的命令行未結(jié)束绪爸,會給出一個提示符+加號湾碎,提示需要在下一行繼續(xù)輸入未完的命名,直到語法輸入完整為止奠货。不然R會有unexpected end of inport的錯誤提示介褥。

> 1+
+ 
> 1+1
[1] 2

標(biāo)準(zhǔn)賦值

R語言的標(biāo)準(zhǔn)賦值符號是<-也可以使用=

例如:將序列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

例如:計算1到5的算數(shù)平均數(shù),冒號會創(chuàng)建一個從第一個數(shù)字到第二個數(shù)字的序列递惋,每個相隔為1柔滔,計算得到的序列稱為一個矢量。mean是計算算數(shù)平均值的函數(shù)丹墨,括號內(nèi)的向量被稱為函數(shù)的參數(shù)廊遍。

> mean(1:10)
[1] 5.5

help

  • 如果想要直到某個函數(shù)或數(shù)據(jù)集的信息可輸入一個問號?加上函數(shù)名稱
  • 如果想查找某個函數(shù)可輸入兩個問號??后跟函數(shù)關(guān)鍵詞

例如:查看中位數(shù)函數(shù)median的幫助文檔

> ?median
> help("median")

> ??median
> help.search("median")

其中?median相當(dāng)于help("median")嬉愧,??median相當(dāng)于help.search("median")贩挣。

?median

默認(rèn)情況下,help只能查找已經(jīng)加載到內(nèi)存中擴展包的函數(shù)和數(shù)據(jù)没酣。如果想要查找未加載到內(nèi)存擴展包中的函數(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ù)集

data函數(shù)

如果要查看本地安裝包的所有數(shù)據(jù)集可使用命令data(package=.packages(all.available=TRUE)進行查看

> data(package=.packages(all.available=TRUE))
Warning messages:
1: In data(package = .packages(all.available = TRUE)) :
  數(shù)據(jù)機從程序包'base'移到了程序包'datasets'
2: In data(package = .packages(all.available = TRUE)) :
  數(shù)據(jù)機從程序包'stats'移到了程序包'datasets'

工作空間

工作空間workspace是當(dāng)前R的工作環(huán)境挂疆,存儲所有用戶定義的對象改览,諸如向量、矩陣缤言、函數(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ǔ)功能的擴展蚌吸,學(xué)會如何使用R包才能真正掌握R語言的精華锈拨。tidyverse中的R包有著同樣的數(shù)據(jù)處理與編程理念,他們的設(shè)計從根本上是為了協(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語言擁有很多存儲數(shù)據(jù)的對象類型推励,包括向量、矩陣肉迫、數(shù)組验辞、數(shù)據(jù)框、列表喊衫。它們在存儲數(shù)據(jù)的類型跌造、創(chuàng)建方式、結(jié)構(gòu)復(fù)雜度族购,以及用于定位和訪問其中個別元素的標(biāo)記等方面有所不同壳贪。

數(shù)據(jù)類型

R語言中的數(shù)據(jù)類型主要包括數(shù)值型(numeric)、邏輯型(logical)寝杖、日期型(date)违施、字符型(character)、復(fù)數(shù)型(complex)瑟幕、原味性(raw 二進制形式保存數(shù)據(jù))磕蒲。此外可能是缺省值(NA)和空值(NULL)。其中最常用的4種類型分別是數(shù)值型只盹、邏輯型辣往、日期型、字符型殖卑。

對象種存儲的數(shù)據(jù)類型可以使用mode()函數(shù)進行查看

判別和轉(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ù)情況下都會使用長度大于1的向量,可使用c()函數(shù)(combine 合并)和對應(yīng)參數(shù)來創(chuàng)建一個向量园细。
  • 向量的數(shù)據(jù)類型可以是字符型扯键、邏輯型(TRUE/T、FALSE/F)珊肃、數(shù)值型荣刑、復(fù)數(shù)型。
  • 向量的長度是含有元素的個數(shù)伦乔,可使用length()函數(shù)進行讀取厉亏。

例如:創(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ù)類型,若不是則會強行執(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

向量運算

R語言是矢量化語言爱只,其中最強大之一的函數(shù)的向量化,意味著操作會自動應(yīng)用于向量的每個元素招刹,而無需遍歷恬试。

例如:創(chuàng)建1~10序列組成的向量,對向量種每個元素進行開方根疯暑。

> 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

向量的四則運算

例如:向量相加

> 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á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語言中使用冒號:自動生成增量為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ù)列的首項數(shù)值妇拯,默認(rèn)為1幻馁。
to 等差數(shù)列的尾項數(shù)值,默認(rèn)為1越锈。
by 等差數(shù)值
length.out 產(chǎn)生向量的長度仗嗦,可簡寫為len

如果只給出首項和尾項數(shù)據(jù)則等差數(shù)值by將自動匹配為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

如果給出首項和尾項以及長度則會自動計算等差數(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

如果給出首項和等差數(shù)值和長度則會自動計算尾項

> 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án)補齊的方式補全

> rep(1:3, times=2, len=8)
[1] 1 2 3 1 2 3 1 2

字母序列

R語言中的letters和LETTERS函數(shù)可用于生成26個英文字母的小寫和大寫字符序列

> 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語言中若需要訪問向量中部分或個別元素可通過在向量名稱后跟方括號[]中添加向量索引的方式來實現(xiàn)甘凭。

  • 向量的初始位置為1
  • 向量索引會根據(jù)元素在向量中的位置挑選中元素
  • 向量索引為負(fù)數(shù)表示排除向量中相應(yīng)位置的元素并返回其它位置的元素
  • 可使用向量索引來選擇多個元素
  • 可使用邏輯向量條件選擇元素
  • 可使用表達式選擇元素

例如:從5個隨機數(shù)中挑選出位置為1稀拐, 3, 5的三個元素

> 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個隨機數(shù)中刪除第1丹弱、第2德撬、第3個

> 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ù)寧無放回隨機抽取多個元素組成向量
  • 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ù)砰逻、復(fù)數(shù)鸣驱、字符泛鸟、邏輯值等數(shù)據(jù)。

矩陣matrix使用兩個下標(biāo)來訪問元素踊东,比如m[i,j]表示矩陣m中第i行第j列的數(shù)據(jù)北滥。

R語言中使用matrix()函數(shù)以向量形式輸入矩陣中的元素刚操,使用ncolnrow屬性設(shè)置矩陣的列數(shù)和行數(shù),從而創(chuàng)建一個矩陣再芋。

> 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ù)組有一個特征屬性叫做dim維數(shù)向量鉴逞,dim維數(shù)向量的長度是多維數(shù)組的維數(shù),dim內(nèi)的元素對應(yīng)維度的長度司训。矩陣只是數(shù)組的特殊情況构捡,因為它只具有兩個維度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末壳猜,一起剝皮案震驚了整個濱河市勾徽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌统扳,老刑警劉巖喘帚,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咒钟,居然都是意外死亡吹由,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門朱嘴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溉知,“玉大人,你說我怎么就攤上這事腕够〖墩В” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵帚湘,是天一觀的道長玫荣。 經(jīng)常有香客問我,道長大诸,這世上最難降的妖魔是什么捅厂? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮资柔,結(jié)果婚禮上焙贷,老公的妹妹穿的比我還像新娘。我一直安慰自己贿堰,他們只是感情好辙芍,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般故硅。 火紅的嫁衣襯著肌膚如雪庶灿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天吃衅,我揣著相機與錄音往踢,去河邊找鬼。 笑死徘层,一個胖子當(dāng)著我的面吹牛峻呕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播趣效,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼山上,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了英支?” 一聲冷哼從身側(cè)響起佩憾,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎干花,沒想到半個月后妄帘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡池凄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年抡驼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肿仑。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡致盟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尤慰,到底是詐尸還是另有隱情馏锡,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布伟端,位于F島的核電站杯道,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏责蝠。R本人自食惡果不足惜党巾,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望霜医。 院中可真熱鬧齿拂,春花似錦、人聲如沸肴敛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叹侄,卻和暖如春巩搏,著一層夾襖步出監(jiān)牢的瞬間昨登,已是汗流浹背趾代。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丰辣,地道東北人撒强。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像笙什,于是被迫代替她去往敵國和親飘哨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容