1. 程式人生 > >【R語言】常用基本函式

【R語言】常用基本函式

向量操作的函式

1、z是一個向量

sum(z)               #求和
mean(z)              #求平均值
sd(z)                #計算方差
median(z)            #求中位數
sort(z)              #按從小到大排序append(z,2:3,after) 新增元素
append(z,2:3,after=2)  #在向量z後面的第2個位置後面新增2和3

矩陣操作的函式

A,B,C是矩陣


t(A)                # 得到矩陣A的轉置矩陣
dim(A)              #求矩陣A的行數和列數
nrow(A) #求矩陣的行數 ncol(A) #求矩陣的列數 rbind(B,C) #按行合併矩陣 cbind(B,C) #按列合併矩陣

分組函式

1、apply函式

對一個數組按行或者按列進行計算
apply(xy,1,sum) 對矩陣xy按行求和
apply(xy,2,mean)對矩陣xy按列求平均數
使用格式為:
apply(X, MARGIN, FUN, …)
其中X為一個數組;MARGIN為一個向量(表示要將函式FUN應用到X的行還是列),若為1表示取行,為2表示取列,為c(1,2)表示行、列都計算。

x <- runif(10,-1,1);x     #生成均勻分佈隨機數,第一個引數n為個數,第二個引數min為下限,第三個max為上限
y <- rnorm(10,0.5,1);y    #生成正態分佈隨機數,第一個引數n為個數,第二個mean=0為正態分佈均值,sd=1位正態分佈的標準差
xy <- cbind(x,y);xy       #根據列進行合併
apply(xy,1,sum)           #對xy按行進行求和運算
apply(xy,2,mean)          #對xy進行按列求平均值
2、tapply函式

進行分組統計

tapply(X, INDEX, FUN = NULL, …, simplify = TRUE)
其中X通常是一向量;INDEX是一個list物件,且該list中的每一個元素都是與X有同樣長度的因子;FUN是需要計算的函式;simplify是邏輯變數,若取值為TRUE(預設值),且函式FUN的計算結果總是為一個標量值,那麼函式tapply返回一個數組;若取值為FALSE,則函式tapply的返回值為一個list物件。需要注意的是,當第二個引數INDEX不是因子時,函式 tapply() 同樣有效,因為必要時 R 會用 as.factor()把引數強制轉換成因子。

t1 <- factor(rep(1:4,length=14),levels=1:5,labels=c("A","B","C","D","E"));t1
t2 <- c(1:14) ;t2
tapply(t2,t1,sum)        #按照t1的標籤對t2進行分組求和,返回值為標量值
tapply(t2,t1,sum,simplify=FALSE)  #按照t1的標籤對t2進行分組求和,並且返回值為list物件
3、lapply()

3、lapply()對列表物件呼叫函式進行計算

lapply(X, FUN, …)
lapply的返回值是和一個和X有相同的長度的list物件,這個list物件中的每個元素是將函式FUN應用到X的每一個元素。其中X為List物件(該list的每個元素都是一個向量),其他型別的物件會被R通過函式as.list()自動轉換為list型別。

L1 <- list(a=1:20,b=runif(30,-2,5),d=matrix(c(1:10))) #建立一個列表
lapply(L1,quantile)  #對列表物件L1求四分位數

quantile 求四分位數
四分位數為對一個列表排序後的,)%0,%25,%50,%75,100%位置上的數

4、sapply()

函式sapply是函式lapply的一個特殊情形,對一些引數的值進行了一些限定,其使用格式為:
sapply(X, FUN,…, simplify = TRUE, USE.NAMES = TRUE)
sapply(, simplify = FALSE, USE.NAMES = FALSE) 和lapply()的返回值是相同的。如果引數simplify=TRUE,則函式sapply的返回值不是一個list,而是一個矩陣;若simplify=FALSE,則函式sapply的返回值仍然是一個list。

sapply(L1,quantile,simplify=FALSE,use.names=FALSE)  #對L1求四分位數,返回結果為列表
sapply(L1,quantile,simplify=TRUE,use.names=FALSE)   #對L1求四分位數,返回結果為矩陣