R語言數(shù)據(jù)類型與相應(yīng)運(yùn)算的實(shí)現(xiàn)
一、常量與變量
1.常量
R 語言基本的數(shù)據(jù)類型有數(shù)值型,邏輯型(TRUE, FALSE),文本(字符串)。 支持缺失值,有專門的復(fù)數(shù)類型。
常量是指直接寫在程序中的值。
數(shù)值型常量包括整型、單精度、雙精度等,一般不需要區(qū)分。寫法如 123, 123.45, -123.45,-0.012, 1.23E2, -1.2E-2 等。為了表示 123 是整型,可以寫成 123L。
字符型常量用兩個(gè)雙撇號(hào)或兩個(gè)單撇號(hào)包圍,如"Li Ming" 或'Li Ming'。字符型支持中文,如"李明" 或'李明'。國(guó)內(nèi)的中文編碼主要有 GBK 編碼和 UTF-8 編碼,有時(shí)會(huì)遇到編碼錯(cuò)誤造成亂碼的題,MS Windows 下 R 程序 一般用 GBK 編碼,但是 RStudio 軟件采用 UTF-8 編碼。在 R 軟件內(nèi)字符串一般用 UTF-8 編碼保存。
邏輯型常量只有 TRUE 和 FALSE。
缺失值用 NA 表示。統(tǒng)計(jì)計(jì)算中經(jīng)常會(huì)遇到缺失值,表示記錄丟失、因?yàn)殄e(cuò)誤而不能用、節(jié)假日沒有數(shù)據(jù)等。除了數(shù)值型,邏輯型和字符型也可以有缺失值,而且字符型的空白值不會(huì)自動(dòng)辨識(shí)為缺失值,需要自己規(guī)定。R 支持特殊的 Inf 值,這是實(shí)數(shù)型值,表示正無窮大,不算缺失值。
復(fù)數(shù)常量寫法如 2.2 + 3.5i, 1i 等。
2.變量
程序語言中的變量用來保存輸入的值或者計(jì)算得到的值。在 R 中,變量可以保存所有的數(shù)據(jù)類型,比如標(biāo)量、向量、矩陣、數(shù)據(jù)框、函數(shù)等。
變量都有變量名,R 變量名必須以字母、數(shù)字、下劃線和句點(diǎn)組成,變量名的第一個(gè)字符不能取為數(shù)字。在中文環(huán)境下,漢字也可以作為變量名的合法字符使用。變量名是區(qū)分大小寫的,y 和 Y 是兩個(gè)不同的變量名。
變量名舉例: x, x1, X, cancer.tab, clean_data, diseaseData。
用 <-賦值的方法定義變量。<-也可以寫成 =,但是 <-更直觀。如
x5 <- 6.25 x6 = sqrt(x5)
二、數(shù)據(jù)類型
R 語言基本的數(shù)據(jù)類型有數(shù)值,邏輯型(TRUE, FALSE),文本(字符串)。支持缺失值,有專門的復(fù)數(shù)類型。
R 語言數(shù)據(jù)結(jié)構(gòu)包括向量,矩陣和數(shù)據(jù)框,多維數(shù)組,列表,對(duì)象等。數(shù)據(jù)中元素、行、列還可以用名字訪問。最基本的是向量類型。向量類型數(shù)據(jù)的訪問方式也是其他數(shù)據(jù)類型訪問方式的基礎(chǔ)。
三、數(shù)值型向量
向量是將若干個(gè)基礎(chǔ)類型相同的值存儲(chǔ)在一起,各個(gè)元素可以按序號(hào)訪問。如 果將若干個(gè)數(shù)值存儲(chǔ)在一起可以用序號(hào)訪問,就叫做一個(gè)數(shù)值型向量。
3.1 c() 函數(shù)
用 c() 函數(shù)把多個(gè)元素或向量組合成一個(gè)向量。如:
marks <- c(10, 6, 4, 7, 8) marks
返回:
再如:
x <- c(1:3, 10:13) x
返回:
再如:
x1 <- c(1, 2) x2 <- c(3, 4) x <- c(x1, x2) x
返回:
3.2 length(x)
length(x) 可以求 x 的長(zhǎng)度
x <- c(1:3, 10:13) length(x)
返回:
3.3 numeric()
numeric() 函數(shù)可以用來初始化一個(gè)指定元素個(gè)數(shù)而元素都等于零的數(shù)值型向量,如 numeric(10) 會(huì)生成元素為 10 個(gè)零的向量,長(zhǎng)度為零的向量表示為 numeric(0)。
numeric(10)
返回:
四、向量運(yùn)算
1.標(biāo)量和標(biāo)量運(yùn)算
單個(gè)數(shù)值稱為標(biāo)量,R 沒有單獨(dú)的標(biāo)量類型,標(biāo)量實(shí)際是長(zhǎng)度為 1 的向量。 R 中四則運(yùn)算用 + - * / ˆ 表示 (加、減、乘、除、乘方),如
1.5 + 2.3 - 0.6 + 2.1*1.2 - 1.5/0.5 + 2^3 ## [1] 10.72
返回:
R 中四則運(yùn)算仍遵從通常的優(yōu)先級(jí)規(guī)則,可以用圓括號(hào) () 改變運(yùn)算的先后次序。如
1.5 + 2.3 - (0.6 + 2.1)*1.2 - 1.5/0.5 + 2^3 ## [1] 5.56
除了加、減、乘、除、乘方,R 還支持整除運(yùn)算和求余運(yùn)算。用%/% 表示整除, 用%% 表示求余。如
5 %/% 3 ## [1] 1 5 %% 3 ## [1] 2
返回:
2.向量與標(biāo)量運(yùn)算
向量與標(biāo)量的運(yùn)算為每個(gè)元素與標(biāo)量的運(yùn)算, 如
x <- c(1, 10) x + 2 ## [1] 3 12 x - 2 ## [1] -1 8 x * 2 ## [1] 2 20 x / 2 ## [1] 0.5 5.0 x ^ 2 ## [1] 1 100 2 / x ## [1] 2.0 0.2 2 ^ x ## [1] 2 1024 x %% 2 ##[1] 1 0 x %/% 2 ##[1] 0 5
返回:
一個(gè)向量乘以一個(gè)標(biāo)量,就是線性代數(shù)中的數(shù)乘運(yùn)算。 四則運(yùn)算時(shí)如果有缺失值,缺失元素參加的運(yùn)算相應(yīng)結(jié)果元素仍缺失。如
c(1, NA, 3) + 10
返回:
3.等長(zhǎng)向量運(yùn)算
等長(zhǎng)向量的運(yùn)算為對(duì)應(yīng)元素兩兩運(yùn)算。如
x1 <- c(1, 10) x2 <- c(4, 2) x1 + x2
返回:
同樣也可以進(jìn)行減,乘,除;如
x1 - x2 ## [1] -3 8 x1 * x2 ## [1] 4 20 x1 / x2 ## [1] 0.25 5.00
4.不等長(zhǎng)向量的運(yùn)算
兩個(gè)不等長(zhǎng)向量的四則運(yùn)算,如果其長(zhǎng)度為倍數(shù)關(guān)系,規(guī)則是每次從頭重復(fù)利用短的一個(gè)。如:
x1 <- c(10, 20) x2 <- c(1, 3, 5, 7) x1 + x2
返回:
不僅是四則運(yùn)算,R 中有兩個(gè)或多個(gè)向量按照元素一一對(duì)應(yīng)參與某種運(yùn)算或函數(shù)調(diào)用時(shí),如果向量長(zhǎng)度不同,一般都采用這樣的規(guī)則。 如果兩個(gè)向量的長(zhǎng)度不是倍數(shù)關(guān)系,會(huì)給出警告信息。如
c(1,2) + c(1,2,3)
返回:
五、向量函數(shù)
1.向量化的函數(shù)
R 中的函數(shù)一般都是向量化的: 在 R 中,如果普通的一元函數(shù)以向量為自變量,一般會(huì)對(duì)每個(gè)元素計(jì)算。這樣的函數(shù)包括 sqrt, log10, log, exp, sin, cos, tan 等許多。如
sqrt(c(1, 4, 6.25))
返回:
為了查看這些基礎(chǔ)的數(shù)學(xué)函數(shù)的列表,運(yùn)行命令 help.start(),點(diǎn)擊鏈接 “Search Engine and Keywords”,找到 “Mathematics” 欄目,瀏覽其中的 “arith” 和 “math” 鏈接中的說明。
常用的數(shù)學(xué)函數(shù)有:常用的數(shù)學(xué)函數(shù)有:
• 舍入:ceiling, floor, round, signif, trunc, zapsmall
• 符號(hào)函數(shù) sign
• 絕對(duì)值 abs
• 平方根 sqrt
• 對(duì)數(shù)與指數(shù)函數(shù) log, exp, log10, log2
• 三角函數(shù) sin, cos, tan
• 反三角函數(shù) asin, acos, atan, atan2
• 雙曲函數(shù) sinh, cosh, tanh
• 反雙曲函數(shù) asinh, acosh, atanh
有一些不太常用的數(shù)學(xué)函數(shù):
• 貝塔函數(shù) beta, lbeta
• 伽 瑪 函 數(shù) gamma, lgamma, digamma, trigamma, tetragamma, pentagamma
• 組合數(shù) choose, lchoose
• 富利葉變換和卷積 fft, mvfft, convolve
• 正交多項(xiàng)式 poly
• 求根 polyroot, uniroot
• 最優(yōu)化 optimize, optim
• Bessel 函數(shù) besselI, besselK, besselJ, besselY
• 樣條插值 spline, splinefun
• 簡(jiǎn)單的微分 deriv
如果自己編寫的函數(shù)沒有考慮向量化問題,可以用 Vectorize() 函數(shù)將其轉(zhuǎn)換成向量化版本。
2.排序函數(shù)
sort(x) 返回排序結(jié)果。rev(x) 返回把各元素排列次序反轉(zhuǎn)后的結(jié)果。order(x) 返回排序用的下標(biāo)。如
x <- c(33, 55, 11) sort(x) ## [1] 11 33 55 rev(sort(x)) ## [1] 55 33 11 order(x) ## [1] 3 1 2 x[order(x)] ## [1] 11 33 55
返回:
order(x) 結(jié)果中 3 是 x 的最小元素 11 所在的位置下標(biāo),1 是 x 的 第二小元素 33 所在的位置下標(biāo),2 是 x 的最大元素 55 所在的位置下標(biāo)。
3.統(tǒng)計(jì)函數(shù)
sum(求和), mean(求平均值), var(求樣本方差), sd(求樣本標(biāo)準(zhǔn)差), min(求最小值), max(求最大值), range(求最小值和最大值) 等函數(shù)稱為統(tǒng)計(jì)函數(shù),把輸入向量看作樣本,計(jì)算樣本統(tǒng)計(jì)量。prod 求所有元素的乘積。
cumsum 和 cumprod 計(jì)算累加和累乘積。如
cumsum(1:5)
返回:
cumprod(1:5)
返回:
其它一些類似函數(shù)有 pmax, pmin, cummax, cummin 等。
4.生成規(guī)則序列的函數(shù)
seq 函數(shù)是冒號(hào)運(yùn)算符的推廣。比如
seq(5) seq(2,5) seq(11, 15, by=2) #產(chǎn)生從 0 到 2π 的等間隔序列,序列長(zhǎng)度指定為 100 seq(0, 2*pi, length.out=100)
返回:
在使用變量名時(shí)次序可以顛倒,比如
seq(to=5, from=2)
返回:
rep() 函數(shù)用來產(chǎn)生重復(fù)數(shù)值。
為了產(chǎn)生一個(gè)初值為零的長(zhǎng)度為 n 的向量,用 x <- rep(0, n) 。
rep(c(1,3), 2)
返回:
再比如:
rep(c(1,3), c(2,4))
把第一自變量的第一個(gè)元素 1 按照第二自變量中第一個(gè)元素 2 的次數(shù)重復(fù),把第一自變量 中第二個(gè)元素 3 按照第二自變量中第二個(gè)元素 4 的次數(shù)重復(fù),返回:
如 果 希 望 重 復(fù) 完 一 個(gè) 元 素 后 再 重 復(fù) 另 一 元 素, 用 each= 選 項(xiàng), 比 如
rep(c(1,3), each=2)
返回:
六、 復(fù)數(shù)向量
復(fù)數(shù)常數(shù)表示如 3.5+2.4i, 1i。用函數(shù) complex() 生成復(fù)數(shù)向量,指定實(shí)部和虛部。如
complex(c(1,0,-1,0), c(0,1,0,-1))
返回:
在 complex() 中可以用 mod 和 arg 指定模和輻角,如
complex(mod=1,arg=(0:3)/2*pi)
返回:
用 Re(z) 求 z 的實(shí)部,用 Im(z) 求 z 的虛部,用 Mod(z) 或 abs(z) 求 z 的模,用 Arg(z) 求 z 的輻角,用 Conj(z) 求 z 的共軛。 sqrt, log, exp, sin 等函數(shù)對(duì)復(fù)數(shù)也有定義,但是函數(shù)定義域在自變量為實(shí)數(shù)時(shí)可能有限制而復(fù)數(shù)無限制,這時(shí)需要區(qū)分自變量類型。如
sqrt(-1)sqrt(-1 + 0i)
返回:
練習(xí)
1. 顯示 1 到 100 的整數(shù)的平方根和立方根(提示:立方根就是三分之一次 方)。
2. 設(shè)有 10 個(gè)人的小測(cè)驗(yàn)成績(jī)?yōu)?
77 60 91 73 85 82 35 100 66 75
(1) 把這 10 個(gè)成績(jī)存入變量 x;
(2) 從小到大排序;
(3) 計(jì)算 order(x),解釋 order(x) 結(jié)果中第 3 項(xiàng)代表的意義。
(4) 計(jì)算這些成績(jī)的平均值、標(biāo)準(zhǔn)差、最小值、最大值、中位數(shù)。
3. 生成 [0, 1] 區(qū)間上等間隔的 100 個(gè)格子點(diǎn)存入變量 x 中。
到此這篇關(guān)于R語言數(shù)據(jù)類型與相應(yīng)運(yùn)算的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)R語言數(shù)據(jù)類型與相應(yīng)運(yùn)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
R語言-如何循環(huán)讀取excel并保存為RData
這篇文章主要介紹了R語言循環(huán)讀取excel并保存為RData的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04R語言RcppEigen計(jì)算點(diǎn)乘與矩陣乘法連乘算法錯(cuò)誤解決
這篇文章主要為大家介紹了RcppEigen計(jì)算點(diǎn)乘與矩陣乘法時(shí)發(fā)生連乘計(jì)算錯(cuò)誤的解決方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11R語言實(shí)現(xiàn)用cbind合并兩列數(shù)據(jù)
這篇文章主要介紹了R語言實(shí)現(xiàn)用cbind合并兩列數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04R語言-繪制雙坐標(biāo)圖直方圖與折線的結(jié)合方式
這篇文章主要介紹了R語言-繪制雙坐標(biāo)圖直方圖與折線的結(jié)合方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04