【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求四分位數,返回結果為矩陣