R語言apply()函數用法


在R語言的幫助文檔里,apply函數的功能是:

Retruns a vector or array or list of values obtained by applying a function to margins of an array or matrix.

就是說apply把一個function作用到array或者matrix的margins(可以理解為數組的每一行或者每一列)中,返回值時vector、array、list。

簡單的說,apply函數經常用來計算矩陣中行或列的均值、和值的函數,具體方法如下:

定義一個3×2的矩陣:

rname = c("one","two","three")
cname = c("first","second")
b <- matrix(1:6,nrow=3, dimnames = list(rname, cname))

b為:

      first second
one       1      4
two       2      5
three     3      6

繼續舉幾個例子:

apply(b,1,sum)

上面的指令代表對矩陣b進行行計算,分別對每一行進行求和。函數涉及了三個參數:

第一個參數是指要參與計算的矩陣;

第二個參數是指按行計算還是按列計算,1——表示按行計算,2——按列計算;

第三個參數是指具體的運算參數。

上述指令的返回結果為:

  one   two three 
    5     7     9 

值得注意的是,apply函數時可以針對數組進行計算你的,就是說數組未必是2維的!!

舉一個3維的情況:

首先頂一個三維數組:

x=array(1:24,c(2,3,4))

三維數組為:

, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

, , 3

     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

使用如下指令:

apply(x,1,sum)

則對1到23的所有奇數進行求和,結果為:

[1] 144 156

同樣,第二個參數改成2后, 

apply(x,2,sum)

結果為:

[1]  84 100 116

 是按照第二個維度進行的求和計算。

第二個參數改成3后,

apply(x,3,sum)

結果為:

[1]  21  57  93 129

 即對第三個維度進行求和計算。

 

對於apply()函數的第三個參數,制定了具體用什么函數進行計算,之前例子里使用的都是sum,對於用戶自定義的函數同樣可以在這里使用。還用前面的矩陣b來舉例。

定義了一個求平方和的函數:

myfun <- function(x){
  sum(x^2)
}

如果選擇按行計算平方和,可使用如下指令:

apply(b,1,myfun)

計算結果為:

one   two three 
   17    29    45 

通常情況大家使用apply之后是需要把apply的返回值作為輸入在其他代碼中使用的,這里尤其重要的一點是apply的返回值的維度。上面的例子就算每一行或者每一列的sum,使用apply之后,返回都是一個向量,並不會因為apply計算行(列)的sum就會自動返回一個列(行)向量。

 


免責聲明!

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



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