1. 程式人生 > >R第七問 R語言常用數學函式

R第七問 R語言常用數學函式

語言的數學運算和一些簡單的函式整理如下: 向量可以進行那些常規的算術運算,不同長度的向量可以相加,這種情況下最短的向量將被迴圈使用。 改變編譯環境的語言(英語) Sys.setenv(LANGUAGE="en") > x <- 1:4 > a <- 10 > x * a [1] 10 20 30 40 > x + a [1] 11 12 13 14 > sum(x)        #對x中的元素求和 [1] 10 > prod(x)       #對x中的元素求連乘積 [1] 24 > prod(2:8)         #8的階乘 [1] 40320 > prod(2:4)         #4的階乘 [1] 24 > max(x)            #x中元素的最大值 [1] 4 > min(x)            #x中元素的最小值 [1] 1 > which.max(x)      #返回x中最大元素的下標 [1] 4 > which.min(x)      #返回x中最小元素的下標 [1] 1 > x <- 4:1          #對向量x重新賦值 > x [1] 4 3 2 1 > which.min(x) [1] 4 > which.max(x) [1] 1  <%in% 包含於函式>

>x[x%in%c(2,3)]<-0
> x
[1] 1 0 0 4    ##把x中的2,3替換成0

> range(x)           #與c(min(x), max(x))作用相同 [1] 1 4 > mean(x)            #x中元素的均值 [1] 2.5 > median(x)          #x中元素的中位數 [1] 2.5 > var(x)         #x中元素的的方差(用n-1做分母) [1] 1.666667 > x [1] 4 3 2 1 > rev(x)         #對x中的元素取逆序 [1] 1 2 3 4 > sort(x)        #將x中的元素按升序排列; [1] 1 2 3 4 > x [1] 4 3 2 1 > cumsum(x)      #求累積和,返回一個向量,它的第i個元素是從x[1]到x[i]的和 [1] 4  7  9 10 > cumsum(rev(x)) [1] 1  3  6 10 > y <- 11:14 > pmin(x,y)      #返回一個向量,它的第i個元素是x[i], y[i], . . .中最小值 [1] 4 3 2 1 > x <- rev(x) #重新賦值 > pmin(x,y) [1] 1 2 3 4 > pmax(x,y)   #返回一個向量,它的每個元素是向量x和y在相應位置的元素的最大者 [1] 11 12 13 14 > cumprod(x) #求累積(從左向右)乘積 [1] 1  2  6 24 > cummin(x)  #求累積最小值(從左向右) [1] 1 1 1 1 > cummax(x)  #求累積最大值(從左向右) [1] 1 2 3 4 > match(x, y)  #返回一個和x的長度相同的向量,表示x中與y中元素相同的元素在y中的位置(沒有則返回NA) [1] NA NA NA NA > y[c(2,4)] <- c(2,4) > y [1] 11 2 13  4 > match(x, y) [1] NA 2   NA  4 >merge(x,y,by=c(" ")) 合併兩個資料框想x,y  以兩個資料框有的共同的某列或者某行就行合併“by” >split(x,f) na.omit(x)函式忽略有缺失值(NA)的觀察資料(如果x是矩陣或資料框則忽略相應的行) > na.omit(match(x,y)) [1] 2 4 attr(,"na.action") [1] 1 3 attr(,"class") [1] "omit" > na.fail(match(x,y)) #na.fail(x) 如果x包含至少一個NA則返回一個錯誤訊息 錯誤於na.fail.default(match(x,y)) : 物件裡有遺漏值 which()函式返回一個包含x符合條件(當比較運算結果為真(TRUE)的下標的向量,在這個結果向量中數值i說明x[i] == a(這個函式的引數必須是邏輯型變數) > which( x == 2) [1] 2 > which( x <= 2) [1] 1 2 求組合數 > choose(4,2) [1] 6 > choose(3,1) [1] 3 > choose(-3,1) [1] -3 > choose(-4,2) [1] 10 > y <- c(1:4, rep(4,1)) > y [1] 1 2 3 4 4 > unique(y)    #如果y是一個向量或者資料框,則返回一個類似的物件但是去掉所有重複的元素(對於重複的元素只取一個) [1] 1 2 3 4 > table(y)              #返回一個表格,給出y中重複元素的個數列表(尤其對於整數型或者因子型變數) y 1 2 3 4 1 1 1 2 > subset(x, x>2) #返回x中的一個滿足特定條件...的子集 [1] 3 4 > sample(x, 2) #從x中無放回抽取size個樣本,選項replace= TRUE表示有放回的抽樣 [1] 1 2 > sample(x, 2, replace = TRUE) #有放回的抽樣 [1] 2 3 >union(x,y)  求兩個向量的並集 >intersect(x,y)  求兩個向量的交集 >setdiff(x=1:4, y=2:3)   求向量x和y中的不同元素(取x中的不同元素) [1] 1 4 R中用來處理資料的函式太多了而不能全部列在這裡。讀者可以找到所有的基本數學函式(log, exp, log10, log2, sin, cos, tan, asin, acos, atan, abs, sqrt,. . . ), 專業函式(gamma,digamma, beta, besselI, . . . ),同樣包括各種統計學中有用的函式。

一、資料管理

vector:向量 numeric:數值型向量 logical:邏輯型向量 character;字元型向量 list:列表 
data.frame:資料框 c:連線為向量或列表 length:求長度 subset:求子集 seq,from:to,sequence:等差序列 
rep:重複 NA:缺失值 NULL:空物件 sort,order,unique,rev:排序 unlist:展平列表 attr,attributes:物件屬性 
mode,typeof:物件儲存模式與型別 names:物件的名字屬性

二、字串處理

character:字元型向量 nchar:字元數 substr:取子串 format,formatC:把物件用格式轉換為字串 paste,strsplit:連線或拆分
 charmatch,pmatch:字串匹配 grep,sub,gsub:模式匹配與替換  

三、複數

complex,Re,Im,Mod,Arg,Conj:複數函式  

四、因子

factor:因子 codes:因子的編碼 levels:因子的各水平的名字 nlevels:因子的水平個數 cut:把數值型物件分割槽間轉換為因子 
table:交叉頻數表 split:按因子分組 aggregate:計算各資料子集的概括統計量 tapply:對“不規則”陣列應用函式

數學

一、計算

+, -, *, /, ^, %%, %/%:四則運算 ceiling,floor,round,signif,
1、round() #四捨五入 例:x <- c(3.1416, 15.377, 269.7) round(x, 0) #保留整數位 round(x, 2) #保留兩位小數 round(x, -1) #保留到十位 2、signif() #取有效數字(跟學過的有效數字不是一個意思) 例:略 3、trunc() #取整    floor() #向下取整    ceiling() #向上取整 例:xx <- c(3.60, 12.47, -3.60, -12.47) trunc(xx) floor(xx) ceiling(xx)
 max,min,pmax,pmin:最大最小值 
range:最大值和最小值 sum,prod:向量元素和,積 cumsum,cumprod,cummax,cummin:累加、累乘 sort:排序 approx和approx fun:插值 diff:差分 sign:符號函式  

二、數學函式

abs,sqrt:絕對值,平方根 log, exp, log10, log2:對數與指數函式 sin,cos,tan,asin,acos,atan,atan2:三角函式 
sinh,cosh,tanh,asinh,acosh,atanh:雙曲函式
beta,lbeta,gamma,lgamma,digamma,trigamma,tetragamma,pentagamma,choose ,lchoose:與貝塔函式、伽瑪函式、組合數有關的特殊函式
fft,mvfft,convolve:富利葉變換及卷積 polyroot:多項式求根 poly:正交多項式 spline,splinefun:樣條差值 
besselI,besselK,besselJ,besselY,gammaCody:Bessel函式 deriv:簡單表示式的符號微分或演算法微分
 

三、陣列

array:建立陣列 matrix:生成矩陣 data.matrix:把資料框轉換為數值型矩陣 lower.tri:矩陣的下三角部分 mat.or.vec:生成矩陣或向量 t:矩陣轉置
 cbind:把列合併為矩陣 rbind:把行合併為矩陣 diag:矩陣對角元素向量或生成對角矩陣 aperm:陣列轉置 nrow, ncol:計算陣列的行數和列數 dim:物件的維向量 
dimnames:物件的維名 row/colnames:行名或列名 %*%:矩陣乘法 crossprod:矩陣交叉乘積(內積) outer:陣列外積 kronecker:陣列的Kronecker積 
apply:對陣列的某些維應用函式 tapply:對“不規則”陣列應用函式 sweep:計算陣列的概括統計量 aggregate:計算資料子集的概括統計量 scale:矩陣標準化
 matplot:對矩陣各列繪圖 cor:相關陣或協差陣 Contrast:對照矩陣 row:矩陣的行下標集 col:求列下標集  

四、線性代數

solve:解線性方程組或求逆 eigen:矩陣的特徵值分解 svd:矩陣的奇異值分解 backsolve:解上三角或下三角方程組 chol:Choleski分解 
qr:矩陣的QR分解 chol2inv:由Choleski分解求逆  

五、邏輯運算

<,>,<=,>=,==,!=:比較運算子 !,&,&&,|,||,xor():邏輯運算子 logical:生成邏輯向量 all,any:邏輯向量都為真或存在真
ifelse():二者擇一 match,%in%:查詢 unique:找出互不相同的元素 which:找到真值下標集合 duplicated:找到重複元素  

六、優化及求根

optimize,uniroot,polyroot:一維優化與求根

程式設計

一、控制結構

if,else,ifelse,switch:分支 for,while,repeat,break,next:迴圈 apply,lapply,sapply,tapply,sweep:替代迴圈的函式。  

二、函式

function:函式定義 source:呼叫檔案 call:函式呼叫 .C,.Fortran:呼叫C或者Fortran子程式的動態連結庫。 Recall:遞迴呼叫 
browser,debug,trace,traceback:程式除錯 options:指定系統引數 missing:判斷虛參是否有對應實參 nargs:引數個數 stop:終止函式執行
on.exit:指定退出時執行 eval,expression:表示式計算 system.time:表示式計算計時 invisible:使變數不顯示 menu:選擇選單(字元列表選單)
其它與函式有關的還有:delay,delete.response,deparse,do.call,dput,environment ,,formals,format.info,interactive,
is.finite,is.function,is.language,is.recursive ,match.arg,match.call,match.fun,model.extract,name,parse,substitute,sys.parent ,warning,machine

三、輸入輸出

cat,print:顯示物件 sink:輸出轉向到指定檔案 dump,save,dput,write:輸出物件 scan,read.table,load,dget:讀入  

四、工作環境

ls,objects:顯示物件列表 rm, remove:刪除物件 q,quit:退出系統 .First,.Last:初始執行函式與退出執行函式。 
options:系統選項 ?,help,help.start,apropos:幫助功能 data:列出資料集  head()檢視資料的頭幾行   tail()檢視資料的最後幾行

統計計算

一、統計分佈

每一種分佈有四個函式:d――density(密度函式),p――分佈函式,q――分位數函式,r――隨機數函式。
比如,正態分佈的這四個函式為dnorm,pnorm,qnorm,rnorm。下面我們列出各分佈字尾,前面加字首d、p、q或r就構成函式名:
norm:正態,t:t分佈,f:F分佈,chisq:卡方(包括非中心) unif:均勻,exp:指數,weibull:威布林,gamma:伽瑪,beta:貝塔 
lnorm:對數正態,logis:邏輯分佈,cauchy:柯西, binom:二項分佈,geom:幾何分佈,hyper:超幾何,nbinom:負二項,pois:泊松 signrank:符號秩,
wilcox:秩和,tukey:學生化極差  

二、簡單統計量

sum, mean, var, sd, min, max, range, median, IQR(四分位間距)等為統計量,sort,order,rank與排序有關,其它還有ave,fivenum,mad,quantile,stem等。

三、統計檢驗

 R中已實現的有chisq.test,prop.test,t.test。  

四、多元分析

cor,cov.wt,var:協方差陣及相關陣計算 biplot,biplot.princomp:多元資料biplot圖 cancor:典則相關 princomp:主成分分析 hclust:譜系聚類 
kmeans:k-均值聚類 cmdscale:經典多維標度 其它有dist,mahalanobis,cov.rob。  

五、時間序列

ts:時間序列物件 diff:計算差分 time:時間序列的取樣時間 window:時間窗  

六、統計模型

lm,glm,aov:線性模型、廣義線性模型、方差分析