如何使用R的apply

2021-09-29 03:41:55 字數 1498 閱讀 7773

x: 是乙個陣列(array),也就是說輸入必須都是相同型別的資料,要麼都是數值型,要麼都是字元型。如果是乙個混合資料型別的data.frame,那麼就會嘗試用as.matrix強制轉換資料

margin:表示對行(1)或者是對列(2)應用函式。

fun: 可是r自帶函式,如mean,sum等。也可以是自己編寫的函式。

...: 是fun中的額外引數

首先建立乙個2行4列的矩陣。

ma <- matrix(c(1:4, 1, 6:8), nrow = 2)

> ma

[,1] [,2] [,3] [,4]

[1,] 1 3 1 7

[2,] 2 4 6 8

對每一行求平均

[1] 3 5

相當於

mean(ma[1,]) # 3

mean(ma[2,]) # 5

對每一列求平均

[1] 1.5 3.5 3.5 7.5

相當於:

mean(ma[,1]) # 1.5

mean(ma[,2]) # 3.5

...

ps:於是我發現margin的1對應ma[x,y]的x,margin的2對應[x,y]的y.

用法說明中,...適用於為函式的提供額外引數。具體的說就是如果乙個函式有多個引數,那麼...就是負責傳入除了乙個個引數以外的其他引數。

比如說mean(x, trim = 0, na.rm = false, ...),就有乙個如何處理na值的引數。

# 手動增加na值

> ma[1,1] <- na

> ma

[,1] [,2] [,3] [,4]

[1,] na 3 1 7

[2,] 2 4 6 8

預設情況:

[1] na 5

新增引數na.rm=true

[1] 3.666667 5.000000

下面計算乙個稍微複雜點的例子,按行迴圈,讓矩陣的第1列加1,並計算出第1和第2列的均值,還有對每一行進行求和。

吐槽:我也不知道為什麼要做這些操作,但是是為了演示函式把

ma

[,1] [,2] [,3] [,4]

[1,] 1 3 1 7

[2,] 2 4 6 8

myfunc <- function(x)

[,1] [,2]

[1,] 2 3

[2,] 12 20

[3,] 2 3

如何使用R的apply

x 是乙個陣列 array 也就是說輸入必須都是相同型別的資料,要麼都是數值型,要麼都是字元型。如果是乙個混合資料型別的data.frame,那麼就會嘗試用as.matrix強制轉換資料 margin 表示對行 1 或者是對列 2 應用函式。fun 可是r自帶函式,如mean,sum等。也可以是自己...

R語言 apply函式族

作用目標 在每個元素上應用 在子集合上應用 array listby 在array上,沿margin方向,依次呼叫 fun,返回結果通常為array型別,如果返回值的向量長度不等,則返回list物件。margin表示陣列引用的第幾維下標 即array index1,index2,中的第幾個index...

R語言apply函式簇

示例 x為列表 x list a 1 5,b 6 10,c 11 15 xx a 1 1 2 3 4 5 b 1 6 7 8 9 10 c 1 11 12 13 14 15 a 1 3 b 1 8 c 1 13示例 列表 x list a 1 5,b 6 10,c 11 15 spply函式 a b...