R語言 apply函式族

2021-07-09 04:10:54 字數 4832 閱讀 9291

作用目標

在每個元素上應用

在子集合上應用

array

listby

在array上,沿margin方向,依次呼叫 fun,返回結果通常為array型別,如果返回值的向量長度不等,則返回list物件。margin表示陣列引用的第幾維下標(即array[index1, index2, ...]中的第幾個index),margin = 1表示行,2表示列,c(1,2) 表示行和列。

–       舉例1:#

二維矩陣物件

x <- cbind(x1 = 3, x2 = c(4:1, 2:5))

dimnames(x)[[1]] <- letters[1:8]

–       舉例2:#

三維陣列物件,資料向量中的值被賦給陣列中的值時,將遵循「主列順序」,即第乙個下標變化最快,最後的下表變化最慢。

z <- array(1:24, dim = 2:4)

當 fun 為 null 的時候,返回乙個長度和array中元素個數相等的vector,指示分組的結果,vector中相等的元素所對應的下標屬於同一組。例如,返回c(1, 2, 1, 3, 2), 表示根據傳入的 indices ,第1、3個元素作為一組,第2、5個元素作為一組,第4個元素作為一組。

–       舉例1:

應用於vector

height <- c(174, 165, 180, 171, 160)

***<-c("f","f","m","f","m")#返回

vector #

返回list #

因為函式

fivenum

返回多值,即使

simplify = true

,也是返回

list物件

–       舉例2:

應用於matrix

m <- matrix(c(1:10), nrow=2)

ind <- matrix(c(rep(1,5),rep(2,5)), nrow=2)

–       舉例3:實現

crosstable功能

df<-data.frame(year=kronecker(2001:2003,rep(1,4)),loc=c('beijing','beijing','shanghai','shanghai'), type=rep(c('a','b'),6), sale=rep(1:12))

#以年份為行、地區為列計算銷售總量 #

以年份為行,類別為列計算銷售總量 #

以年份,地區和類別計算銷售總量

在 list 上逐個元素呼叫 fun 。可以用於dataframe上,因為dataframe是一種特殊形式的list。若物件不是list和表示式型別,會先強制轉換為list後再應用於fun函式。

–       舉例1:

應用於matrix

lst <- list(a=c(1:5), b=c(6:10))

–       舉例2:#

非list

會先強制轉換為

list

後再求均值,這時每乙個元素都是乙個

list

的物件

x <- 1:3

–       舉例3:#

對dataframe使用

df <- data.frame(x=c(1:3),y=c(6:8))

–       舉例1:

x<-list(a= 1:10, beta = exp(-3:3), logic = c(true,false,false,true))

#simplify = false,同返回

list物件

–       舉例2:

#simplify = true,

以向量形式返回結果

–       舉例3:#

預設的simplify=true

,fivenum

返回多值,因此最終返回結果為

matrix物件

logical < integer < double < complex

–       舉例1:#

返回值的型別和長度要和預設值一致

x<-list(a= 1:10, beta = exp(-3:3), logic =c(true,false,false,true))

–       舉例1:#

對兩個list

物件的元素依次求和

–       舉例2:#

對第一和第二個物件使用

rep函式,物件二長度較短會被迴圈使用 #

返回物件長度不同,返回

list物件

#返回物件長度相同同,返回

matrix物件

–       舉例3:#

函式返回多值,因此返回

matrix物件

–       舉例4:#

使用moreargs

給出rep

的引數x值

"list" 新建乙個list,元素型別在 classes 中的,呼叫 fun ;不在 classes 中的型別,使用 deflt 。會保留原始list的結構。

"unlist" 相當於對"list"模式下的結果呼叫 unlist(recursive=true)

–       舉例1:

x <- list(list(a = pi, b =list(c = 2)), d = "a test")#對

x中的numeric

型別的元素使用

sqrt函式,

保留非numeric

元素值不變

–       舉例2:#

對x中的character

型別的元素使用

nchar函式,

保留非nchar

元素值不變

–       舉例3:#

對x中的character

型別的元素使用

nchar

函式,非

character

元素使用預設值

deflt

–       舉例4:#

對x中的character

型別的元素使用

nchar

函式,非

character

元素使用預設值

deflt

,返回結果使用

unlist函式

–       舉例5:#

對x中的character

型別的元素使用

nchar

函式,沒有設定

deflt

引數會直接捨棄非

character

元素,返回結果使用

unlist函式

#對於how=list

的情況,沒有設定

deflt

引數會使用預設值

null

舉例6:#

對x中的numeric

型別的元素使用

log函式,函式引數為

base=2

對environment中命名值進行fun計算後返回乙個列表值,使用者可以請求所有使用過的命名物件。

–       舉例1:

env <- new.env(hash = false)

env$a <- 1:10

env$beta <- exp(-3:3)

env$logic <- c(true, false, false, true)

# 列出環境中的物件

utils::ls.str(env)

# 對每個元素計算均值

各方法詳細總結見下表:

函式

用法

輸入

輸出

語法

對陣列行或者列使用函式

array

array/list

對列表或者向量使用函式

list/

expression

list

對列表或者向量使用函式

list/

expression

list/array

對列表或者向量使用函式

list/

expression

array

對不規則陣列使用函式

array

array/list

對環境中的值使用函式

values in an environment

list

對多個列表或者向量引數使用函式

list/array

list/array

運用函式遞迴產生列表

list

list/vector

R語言 向量化計算(apply族函式)

獲取內建資料 data print data mpg cyl disp hp drat mazda rx4 21.0 6 160 110 3.90 mazda rx4 wag 21.0 6 160 110 3.90 datsun 710 22.8 4 108 93 3.85 hornet 4 dri...

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...

R語言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繼續舉幾個例子 上...