R語言 apply,sapply,lapply,tapply,vapply, mapply的用法


apply()

apply(m,dimcode,f,fargs)

  • m 是一個矩陣。
  • dimcode是維度編號,取1則為對行應用函數,取2則為對列運用函數。
  • f是函數
  • fargs是f的可選參數集
> z <- matrix(1:6, nrow = 3) > f <- function(x) { + x/c(2, 8) + } > apply(z,1,f) #f函數得到兩個元素,則為幾行,豎着來的  [,1] [,2] [,3] [1,] 0.5 1.000 1.50 [2,] 0.5 0.625 0.75


zzz=matrix(1:6,nrow=2)
zzz
yyy <- apply(zzz, 1, function(x) sum( x <=3))
yyy

 

 

 

 

 

 

lapply()

lapply()(代表list apply)與矩陣的apply()函數的用法類似, 對列表的每個組件執行給定的函數,並返回另一個列表。

> x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE,FALSE,FALSE,TRUE)) > lapply(x, mean) $a [1] 5.5 $beta [1] 4.535125 $logic [1] 0.5

sapply()

sapply()(代表simplified [l]apply)可以將結果整理以向量,矩陣,列表 的形式輸出。

> sapply(x, mean) a beta logic 5.500000 4.535125 0.500000 > sapply(x, quantile) #每一個對應組件輸出5個元素,所以為5行,像矩陣一樣,豎着來的。 a beta logic 0% 1.00 0.04978707 0.0 25% 3.25 0.25160736 0.0 50% 5.50 1.00000000 0.5 75% 7.75 5.05366896 1.0 100% 10.00 20.08553692 1.0 > sapply(2:4, seq) [[1]] [1] 1 2 [[2]] [1] 1 2 3 [[3]] [1] 1 2 3 4

vapply()

vapply()與sapply()相似,他可以預先指定的返回值類型。使得得到的結果更加安全。

> vapply(x, quantile, c(1,2,5,6,8)) #它需要一個5個長度的向量來告訴他返回的類型,向量里面的內容可以變換 a beta logic 0% 1.00 0.04978707 0.0 25% 3.25 0.25160736 0.0 50% 5.50 1.00000000 0.5 75% 7.75 5.05366896 1.0 100% 10.00 20.08553692 1.0

tapply( )

tapply(x,f,g)需要向量 x (x不可以是數據框),因子或因子列表 f , 函數 g 。
tapply()執行的操作是:按照f對x分組,在分組后的向量上運行函數 g

> a <- c(24,25,36,37) > b <- c('q', 'w', 'q','w') > tapply(a, b, mean) q w 30 31 

mapply()

多參數版本的sapply()。第一次計算傳入各組向量的第一個元素到FUN,進行結算得到結果;第二次傳入各組向量的第二個元素,得到結果;第三次傳入各組向量的第三個元素…以此類推。

l1 <- list(a = c(1:10), b = c(11:20)) l2 <- list(c = c(21:30), d = c(31:40)) mapply(sum, l1$a, l1$b, l2$c, l2$d) ## [1] 64 68 72 76 80 84 88 92 96 100
 
REF:
https://www.cnblogs.com/xihehe/p/7473981.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM