apply包

眾所周知,當(dāng)我們利用R語(yǔ)言處理大型數(shù)據(jù)集時(shí),for循環(huán)語(yǔ)句的運(yùn)算效率非常低丸逸。因此在實(shí)際應(yīng)用中锦援,數(shù)據(jù)處理人員常常利用apply族函數(shù)替代for循環(huán)以便于在一定程度上提升R語(yǔ)言數(shù)據(jù)處理速度蝗碎,除此之外湖笨,該方法還可以在一定程度上簡(jiǎn)化代碼。但是蹦骑,我可能已經(jīng)習(xí)慣了for慈省、while的循環(huán)套循環(huán),有時(shí)自己也暈了眠菇,也難怪大佬會(huì)嚴(yán)重鄙視只會(huì)寫(xiě)R的碼農(nóng)(中槍?zhuān)┍枭耄虼诉@節(jié)將介紹apply()族的函數(shù)。

1. apply()函數(shù)

apply(X, MARGIN, FUN, ...)

X:數(shù)組琼锋、矩陣放闺、數(shù)據(jù)框
MARGIN: 參數(shù)MARGIN是apply()應(yīng)用的維度,MARGIN=1表示矩陣和數(shù)組的行缕坎,MARGIN=2表示矩陣和數(shù)組的列怖侦,MARGIN=c(1,2)則是對(duì)行和列都進(jìn)行操作。
FUN: 自定義的調(diào)用函數(shù)谜叹,可帶有參數(shù)

apply函數(shù)可以對(duì)矩陣匾寝、數(shù)據(jù)框、數(shù)組(二維荷腊、多維)艳悔,按行或列進(jìn)行循環(huán)計(jì)算,對(duì)子元素進(jìn)行迭代女仰,并把子元素以參數(shù)傳遞的形式給自定義的FUN函數(shù)中猜年,并以返回計(jì)算結(jié)果。因此可以代替很多for的迭代疾忍。
先來(lái)一個(gè)matrix的例子:

# 建立一個(gè)五行六列的矩陣x
> x <- matrix(rnorm(30), nrow=5, ncol=6)
> print(x)
       [,1]    [,2]   [,3]    [,4]   [,5]   [,6]
[1,] -0.281 -0.8657 -0.617  0.0553 -2.007  1.811
[2,]  0.812 -0.0599 -0.262 -1.0007  0.768 -2.550
[3,] -0.208  0.0115  0.912 -0.7582  0.406  1.150
[4,]  1.451  0.2691  1.124 -0.6114 -0.832  1.228
[5,]  0.841 -0.5282 -0.604 -1.3167  0.958  0.152
> dimnames(x)[[1]] <- letters[1:5]    #把行的名字改為a~e
> dimnames(x)[[2]] <- letters[1:6]    #把列的名字改為a~f
> apply(x, 2, mean, trim = .2)        #以列為單位計(jì)算截尾平均值
      a       b       c       d       e       f 
 0.4820 -0.1922  0.0155 -0.7901  0.1140  0.8434 
> col.sums <- apply(x, 2, sum)        #以列為單位求和
> col.sums
     a      b      c      d      e      f 
 2.616 -1.173  0.553 -3.632 -0.707  1.791 
> row.sums <- apply(x, 1, sum)        #以行為單位求和
> row.sums
     a      b      c      d      e 
-1.905 -2.293  1.514  2.628 -0.497 

之后再來(lái)一個(gè)data.frame的例子:

> iris_sum <- apply(iris[,1:4],2,sum)
> iris_sum
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
         876          459          564          180 
> iris_mean <- apply(iris[,1:4],2,mean)
> iris_mean
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
        5.84         3.06         3.76         1.20 

下面我們引用“優(yōu)雅R”(吹爆大佬G峭狻)的三段代碼,用來(lái)對(duì)比apply()函數(shù)和其他方法的區(qū)別:

> x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
> myFUN<- function(x, c1, c2) {
+     c(sum(x[c1],1), mean(x[c2])) 
+ }
> apply(x,1,myFUN,c1='x1',c2=c('x1','x2'))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]  4.0    4  4.0    4  4.0    4  4.0    4
[2,]  3.5    3  2.5    2  2.5    3  3.5    4
> df<-data.frame()
> for(i in 1:nrow(x)){
+      row<-x[i,]                                         
+      df<-rbind(df,rbind(c(sum(row[1],1), mean(row))))   
+    }
> df
  V1  V2
1  4 3.5
2  4 3.0
3  4 2.5
4  4 2.0
5  4 2.5
6  4 3.0
7  4 3.5
8  4 4.0
> data.frame(x1=x[,1]+1,x2=rowMeans(x))
  x1  x2
1  4 3.5
2  4 3.0
3  4 2.5
4  4 2.0
5  4 2.5
6  4 3.0
7  4 3.5
8  4 4.0

上面介紹了三種方法一罩,第一種是用apply函數(shù)按行進(jìn)行循環(huán)計(jì)算杨幼,第二種是用for循環(huán)依次迭代賦值,第三種方法是利用了R的特性聂渊,通過(guò)向量化計(jì)算來(lái)完成的差购,三種方法都可以得出相同的結(jié)果,但是三者對(duì)計(jì)算機(jī)的性能能耗有區(qū)別汉嗽,貼一段比較一下3種操作上面性能上的消耗:

# 清空環(huán)境變量
> rm(list=ls())

# 封裝fun1
> fun1<-function(x){
+   myFUN<- function(x, c1, c2) {
+     c(sum(x[c1],1), mean(x[c2])) 
+   }
+   apply(x,1,myFUN,c1='x1',c2=c('x1','x2'))
+ }

# 封裝fun2
> fun2<-function(x){
+   df<-data.frame()
+   for(i in 1:nrow(x)){
+     row<-x[i,]
+     df<-rbind(df,rbind(c(sum(row[1],1), mean(row))))
+   }
+ }

# 封裝fun3
> fun3<-function(x){
+   data.frame(x1=x[,1]+1,x2=rowMeans(x))
+ }

# 生成數(shù)據(jù)集
> x <- cbind(x1=3, x2 = c(400:1, 2:500))

# 分別統(tǒng)計(jì)3種方法的CPU耗時(shí)欲逃。
> system.time(fun1(x))
用戶(hù) 系統(tǒng) 流逝 
0.01 0.00 0.02 

> system.time(fun2(x))
用戶(hù) 系統(tǒng) 流逝 
0.19 0.00 0.18 

> system.time(fun3(x))
用戶(hù) 系統(tǒng) 流逝 
   0    0    0 

從CPU的耗時(shí)來(lái)看,用for循環(huán)實(shí)現(xiàn)的計(jì)算是耗時(shí)最長(zhǎng)的诊胞,apply實(shí)現(xiàn)的循環(huán)耗時(shí)很短暖夭,而直接使用R語(yǔ)言?xún)?nèi)置的向量計(jì)算的操作幾乎不耗時(shí)。通過(guò)上面的測(cè)試撵孤,對(duì)同一個(gè)計(jì)算來(lái)說(shuō)迈着,優(yōu)先考慮R語(yǔ)言?xún)?nèi)置的向量計(jì)算,必須要用到循環(huán)時(shí)則使用apply函數(shù)邪码,應(yīng)該盡量避免使用for,while等操作方法裕菠。

2. lapply()函數(shù)

lapply(X, FUN, ...)

X: 表示列表或者向量
FUN:在行或者列上進(jìn)行運(yùn)算的函數(shù)。
...:運(yùn)算函數(shù)的參數(shù)

lapply函數(shù)用來(lái)對(duì)list闭专、data.frame數(shù)據(jù)集進(jìn)行循環(huán)奴潘,并返回和X長(zhǎng)度同樣的list結(jié)構(gòu)作為結(jié)果集。apply()函數(shù)以列表形式返回應(yīng)用函數(shù)的結(jié)果影钉,這是其最顯著特征画髓,需要注意。

# example 1
> lapply(iris[, 1:4], sum)
$Sepal.Length
[1] 876

$Sepal.Width
[1] 459

$Petal.Length
[1] 564

$Petal.Width
[1] 180

> lapply(iris[, 1:4], mean)
$Sepal.Length
[1] 5.84

$Sepal.Width
[1] 3.06

$Petal.Length
[1] 3.76

$Petal.Width
[1] 1.2
# example 2
> A <- matrix(c(1:9), nrow=3, ncol=3)
> B <- matrix(c(4:15), nrow=4, ncol=3)
> C <- matrix(rep(seq(8,10),2), nrow=3)
> data <- list(A=A, B=B, C=C)
> lapply(data, "[",,2)       #提取列表中每一部分第二列的元素
$A
[1] 4 5 6

$B
[1]  8  9 10 11

$C
[1]  8  9 10

> lapply(data, "[", 1,)      #提取列表中每一部分第一行的元素
$A
[1] 1 4 7

$B
[1]  4  8 12

$C
[1] 8 8

> lapply(data, sum)          #對(duì)列表每一部分求和
$A
[1] 45

$B
[1] 114

$C
[1] 54

lapply函數(shù)需要注意的有兩點(diǎn):

  1. lapply處理的對(duì)象只能是列表或者是向量平委,他是對(duì)塊進(jìn)行運(yùn)算奈虾,而不是對(duì)列或者行進(jìn)行運(yùn)算,如果要對(duì)數(shù)據(jù)框的行或者列運(yùn)算廉赔,可以將其先轉(zhuǎn)化為列表肉微,若直接計(jì)算:
> x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
> x <- data.frame(x)
> x
  x1 x2
1  3  4
2  3  3
3  3  2
4  3  1
5  3  2
6  3  3
7  3  4
8  3  5
> class(x)
[1] "data.frame"
> lapply(x,sum)
$x1
[1] 24

$x2
[1] 24
  1. lapply結(jié)果返回的是list,有時(shí)可能需要將得到的列表再次轉(zhuǎn)為數(shù)據(jù)框蜡塌。轉(zhuǎn)換需要經(jīng)過(guò)如下幾個(gè)階段:

1.使用unlist()函數(shù)碉纳,將列表轉(zhuǎn)換為數(shù)據(jù)框。
2.使用matrix()函數(shù)馏艾,將向量轉(zhuǎn)換為矩陣劳曹。
3.使用as.data.frame()函數(shù),將矩陣轉(zhuǎn)換為數(shù)據(jù)框琅摩。
4.使用names()函數(shù)厚者,從列表獲取變量名,賦給數(shù)據(jù)框的各列迫吐。

3. sapply函數(shù)

sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)

X: 表示列表或者向量库菲,與lapply一樣
FUN:在行或者列上進(jìn)行運(yùn)算的函數(shù)。
...:運(yùn)算函數(shù)的參數(shù)
simplify:邏輯值或者字符志膀,用來(lái)確定返回值的類(lèi)型:TRUE表示返回向量或矩陣熙宇;simply = "array"返回?cái)?shù)組
USE.NAMES:確定結(jié)果的名字。

sapply函數(shù)是一個(gè)簡(jiǎn)化版的lapply溉浙,lapplysapply函數(shù)可以用于處理列表數(shù)據(jù)和向量數(shù)據(jù)烫止。lapply函數(shù)得到處理得到的數(shù)據(jù)類(lèi)型是列表,而sapply函數(shù)得到處理的數(shù)據(jù)類(lèi)型是向量戳稽。這兩個(gè)函數(shù)除了在返回值類(lèi)型不同外馆蠕,其他方面基本完全一樣期升。

> sapply(iris[, 1:4], sum)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
         876          459          564          180 
> sapply(iris[, 1:4], mean)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
        5.84         3.06         3.76         1.20 
> x <- sapply(iris[,1:4],mean)
> class(x)
[1] "numeric"

4. vapply()函數(shù)

vapply(X, FUN, FUN.VALUE, ..., USE.NAMES = TRUE)

X: 表示列表或者向量
FUN:在行或者列上進(jìn)行運(yùn)算的函數(shù)。
FUN.VALUE:指定返回值的類(lèi)型和名稱(chēng)
USE.NAMES:確定結(jié)果的名字互躬。

vapply函數(shù)類(lèi)似于sapply函數(shù)播赁,其主要區(qū)別為vapply函數(shù)可預(yù)先指定返回值的類(lèi)型和名稱(chēng)。在vapply函數(shù)中總是會(huì)進(jìn)行簡(jiǎn)化吼渡,vapply會(huì)檢測(cè)FUN的所有值是否與FUN.VALUE兼容容为,以使他們具有相同的長(zhǎng)度和類(lèi)型。類(lèi)型順序:邏輯寺酪、整型坎背、實(shí)數(shù)、復(fù)數(shù)寄雀。

# example 1
> x <- data.frame(x)
> 
> x<-data.frame(a=rnorm(4,4,4),
+               b=rnorm(4,5,3),
+               c=rnorm(4,5,3))
> x
     a    b    c
1 4.44 6.75 6.73
2 6.86 3.24 2.23
3 5.02 9.34 4.25
4 8.92 6.33 1.33
> vapply(x,mean,c(c=0))
   a    b    c 
6.31 6.41 3.64 
# example 2
> k<-function(x){
+   list(mean(x),sd(x))
+ }
> vapply(x,k,c(list(c=0,b=0)))
  a    b    c   
c 6.31 6.41 3.64
b 2.02 2.5  2.4 
example 3
> i39 <- sapply(3:9, seq) # list of vectors
> vapply(i39, fivenum,
+                c(Min. = 0, "1st Qu." = 0, Median = 0, "3rd Qu." = 0, Max. = 0))
        [,1] [,2] [,3] [,4] [,5] [,6] [,7]
Min.     1.0  1.0    1  1.0  1.0  1.0    1
1st Qu.  1.5  1.5    2  2.0  2.5  2.5    3
Median   2.0  2.5    3  3.5  4.0  4.5    5
3rd Qu.  2.5  3.5    4  5.0  5.5  6.5    7
Max.     3.0  4.0    5  6.0  7.0  8.0    9

5. tapply函數(shù)

tapply(data, index, FUN = NULL, ..., simplify = TRUE)

data只能是向量
index為因子向量得滤,長(zhǎng)度應(yīng)與data相同。
FUN:分組計(jì)算的函數(shù)盒犹。
...:函數(shù)的額外參數(shù)
Simplify默認(rèn)輸出為向量耿戚,若simplify=FALSE輸出列表。
index向量因子有兩個(gè)形式:1)數(shù)據(jù)框的變量2)指定的分類(lèi)向量阿趁∧せ祝可用c()生成不規(guī)則的因子,也可用gl()生成等長(zhǎng)分類(lèi)的向量脖阵。

tapply用于分組的循環(huán)計(jì)算皂股,通過(guò)INDEX參數(shù)可以把數(shù)據(jù)集X進(jìn)行分組,相當(dāng)于group by的操作命黔。INDEX 一個(gè)或多個(gè)因子的列表呜呐,每個(gè)因子的長(zhǎng)度都與x相同。

# example 1
> daf1<-data.frame(gender=c("M","M","F","M","F","F","M"),
+                                   age=c(47,59,21,32,40,24,25),
+                                  salary=c(55000,88000,32450,76500,123000,45650,65000)
+                                   )
> daf1
  gender age salary over40
1      M  47  55000      1
2      M  59  88000      1
3      F  21  32450      0
4      M  32  76500      0
5      F  40 123000      0
6      F  24  45650      0
7      M  25  65000      0
> daf1$over40=ifelse(daf1$age>40,1,0)
> daf1$over40
[1] 1 1 0 0 0 0 0
> tapply(daf1$salary,list(daf1$gender,daf1$over40),mean)
      0     1
F 67033    NA
M 70750 71500
# example 2
> 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))
> df
   year      loc type sale
1  2001  beijing    A    1
2  2001  beijing    B    2
3  2001 shanghai    A    3
4  2001 shanghai    B    4
5  2002  beijing    A    5
6  2002  beijing    B    6
7  2002 shanghai    A    7
8  2002 shanghai    B    8
9  2003  beijing    A    9
10 2003  beijing    B   10
11 2003 shanghai    A   11
12 2003 shanghai    B   12
> tapply(df$sale, df[,c('year','loc')], sum)
      loc
year   beijing shanghai
  2001       3        7
  2002      11       15
  2003      19       23
> tapply(df$sale, df[,c('year','type')], sum)
      type
year    A  B
  2001  4  6
  2002 12 14
  2003 20 22
# example 3
> install.packages("HSAUR2")
trying URL 'https://mirror-hk.koddos.net/CRAN/bin/macosx/el-capitan/contrib/3.6/HSAUR2_1.1-17.tgz'
Content type 'application/x-gzip' length 2804517 bytes (2.7 MB)
==================================================
downloaded 2.7 MB


The downloaded binary packages are in
    /var/folders/fl/rylb7v3171970p_spz6sj2hc0000gn/T//RtmpHnOov7/downloaded_packages
> library(tools)
> library(HSAUR2)
> data("CHFLS")
> head(CHFLS)
    R_region R_age              R_edu R_income  R_health R_height        R_happy A_height
2  Northeast    54 Senior high school      900      Good      165 Somewhat happy      172
3  Northeast    46 Senior high school      500      Fair      156 Somewhat happy      170
10 Northeast    48 Senior high school      800      Good      163 Somewhat happy      172
11 Northeast    46 Junior high school      300      Fair      164 Somewhat happy      174
22 Northeast    45 Junior high school      300      Fair      162 Somewhat happy      172
23 Northeast    36 Senior high school      500 Excellent      161 Somewhat happy      180
                A_edu A_income
2  Senior high school      500
3  Senior high school      800
10 Junior high school      700
11  Elementary school      700
22 Junior high school      400
23     Junior college      900
> str(CHFLS)
'data.frame':   1534 obs. of  10 variables:
 $ R_region: Factor w/ 6 levels "Coastal South",..: 5 5 5 5 5 5 5 5 5 5 ...
 $ R_age   : num  54 46 48 46 45 36 48 36 20 30 ...
 $ R_edu   : Ord.factor w/ 6 levels "Never attended school"<..: 4 4 4 3 3 4 3 3 3 4 ...
 $ R_income: num  900 500 800 300 300 500 0 100 200 400 ...
 $ R_health: Ord.factor w/ 5 levels "Poor"<"Not good"<..: 4 3 4 3 3 5 2 4 3 4 ...
 $ R_height: num  165 156 163 164 162 161 167 156 158 160 ...
 $ R_happy : Ord.factor w/ 4 levels "Very unhappy"<..: 3 3 3 3 3 3 4 2 2 3 ...
 $ A_height: num  172 170 172 174 172 180 168 173 178 176 ...
 $ A_edu   : Ord.factor w/ 6 levels "Never attended school"<..: 4 4 3 2 3 5 3 4 5 4 ...
 $ A_income: num  500 800 700 700 400 900 300 800 200 600 ...
> tapply(CHFLS$R_income, CHFLS$R_health, mean)
     Poor  Not good      Fair      Good Excellent 
      338       419       649       645       614 
> tapply(CHFLS$R_income, CHFLS$R_edu, mean)
Never attended school     Elementary school    Junior high school    Senior high school 
                  210                   416                   535                   667 
       Junior college            University 
                 1170                  1707 

6.mapply()函數(shù)

mapply(FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE,   USE.NAMES = TRUE)

FUN:在行或者列上進(jìn)行運(yùn)算的函數(shù)悍募。
MoreArgs:FUN函數(shù)的其它參數(shù)蘑辑。
simplify:邏輯值或者字符,用來(lái)確定返回值的類(lèi)型坠宴。
USE.NAMES:確定結(jié)果的名字洋魂。

mapply也是sapply的變形函數(shù),類(lèi)似多變量的sapply喜鼓,但是參數(shù)定義有些變化副砍。 mapply()函數(shù)的第一個(gè)參數(shù)是待應(yīng)用的FUN函數(shù),它接受多個(gè)參數(shù)庄岖。要傳遞給FUN()函數(shù)的參數(shù)作為數(shù)據(jù)保存時(shí)豁翎,mapply()函數(shù)將保存在數(shù)據(jù)中的值轉(zhuǎn)換為參數(shù),傳遞給FUN函數(shù)隅忿,并調(diào)用執(zhí)行FUN函數(shù)心剥。

> mapply(rep, 1:4, 4:1)
[[1]]
[1] 1 1 1 1

[[2]]
[1] 2 2 2

[[3]]
[1] 3 3

[[4]]
[1] 4

> mapply(rep, times = 1:4, x = 4:1)
[[1]]
[1] 4

[[2]]
[1] 3 3

[[3]]
[1] 2 2 2

[[4]]
[1] 1 1 1 1

> mapply(rep, times = 1:4, MoreArgs = list(x = 42))
[[1]]
[1] 42

[[2]]
[1] 42 42

[[3]]
[1] 42 42 42

[[4]]
[1] 42 42 42 42

> mapply(function(x, y) seq_len(x) + y,
+        c(a =  1, b = 2, c = 3),  # names from first
+        c(A = 10, B = 0, C = -10))
$`a`
[1] 11

$b
[1] 1 2

$c
[1] -9 -8 -7

> word <- function(C, k) paste(rep.int(C, k), collapse = "")
> word
function(C, k) paste(rep.int(C, k), collapse = "")
> utils::str(mapply(word, LETTERS[1:6], 6:1, SIMPLIFY = FALSE))
List of 6
 $ A: chr "AAAAAA"
 $ B: chr "BBBBB"
 $ C: chr "CCCC"
 $ D: chr "DDD"
 $ E: chr "EE"
 $ F: chr "F"
> data("iris")
> mapply(mean,iris[, 1:4])
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 

> mapply(sum,iris[, 1:4])
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
       876.5        458.6        563.7        179.9

7. rapply函數(shù)

rapply(object, f, classes = "ANY", deflt = NULL, how = c("unlist", "replace", "list"), ...)

object: list形式;
f: 自定義的調(diào)用函數(shù);
classes : 匹配類(lèi)型, ANY為所有類(lèi)型;
deflt: 非匹配類(lèi)型的默認(rèn)值;
how: 3種操作方式邦尊,當(dāng)為replace時(shí),則用調(diào)用f后的結(jié)果替換原list中原來(lái)的元素优烧;當(dāng)為list時(shí)蝉揍,新建一個(gè)list,類(lèi)型匹配調(diào)用f函數(shù)匙隔,不匹配賦值為deflt;當(dāng)為unlist時(shí)熏版,會(huì)執(zhí)行一次unlist(recursive = TRUE)的操作;

rapply是一個(gè)遞歸版本的lapply纷责,它只處理list類(lèi)型數(shù)據(jù),對(duì)list的每個(gè)元素進(jìn)行遞歸遍歷撼短,如果list包括子元素則繼續(xù)遍歷再膳。

> X <- list(list(a = pi, b = list(c = 1:1)), d = "a test")
> X
[[1]]
[[1]]$a
[1] 3.14

[[1]]$b
[[1]]$b$c
[1] 1



$d
[1] "a test"
> rapply(X, sqrt, classes = "numeric", how = "replace")
[[1]]
[[1]]$a
[1] 1.77

[[1]]$b
[[1]]$b$c
[1] 1



$d
[1] "a test"
> rapply(X, nchar, classes = "character",
+        deflt = as.integer(NA), how = "list")
[[1]]
[[1]]$a
[1] NA

[[1]]$b
[[1]]$b$c
[1] NA



$d
[1] 6
> rapply(X, nchar, classes = "character",
+        deflt = as.integer(NA), how = "unlist")
  a b.c   d 
 NA  NA   6 
> rapply(X, nchar, classes = "character", how = "unlist")
d 
6 
> rapply(X, log, classes = "numeric", how = "replace", base = 2)
[[1]]
[[1]]$a
[1] 1.65

[[1]]$b
[[1]]$b$c
[1] 1



$d
[1] "a test"

8. eapply函數(shù)

eapply(env, FUN, ..., all.names = FALSE, USE.NAMES = TRUE)

env 將被使用的環(huán)境
all.names 邏輯值,指示是否對(duì)所有值使用該函數(shù)
USE.NAMES 邏輯值曲横,指示返回的列表結(jié)果是否包含命名

eapply函數(shù)通過(guò)對(duì)environment中命名值進(jìn)行FUN計(jì)算后返回一個(gè)列表值喂柒,用戶(hù)可以請(qǐng)求所有使用過(guò)的命名對(duì)象。

> require(stats)
> env <- new.env(hash = FALSE)
> env$a <- 1:10
> env$beta <- exp(-3:3)
> utils::ls.str(env)
a :  int [1:10] 1 2 3 4 5 6 7 8 9 10
beta :  num [1:7] 0.0498 0.1353 0.3679 1 2.7183 ...
> eapply(env, quantile, probs = 1:3/4)
$beta
  25%   50%   75% 
0.252 1.000 5.054 

$a
 25%  50%  75% 
3.25 5.50 7.75 

> eapply(env, quantile)
$beta
     0%     25%     50%     75%    100% 
 0.0498  0.2516  1.0000  5.0537 20.0855 

$a
   0%   25%   50%   75%  100% 
 1.00  3.25  5.50  7.75 10.00 
image

本文非原創(chuàng)禾嫉,僅為個(gè)人學(xué)習(xí)筆記總結(jié)灾杰,侵刪。
本文參考以下文獻(xiàn):
apply()族函數(shù)- 土豆R語(yǔ)言與數(shù)據(jù)分析實(shí)戰(zhàn)
apply族函數(shù)應(yīng)用指南
R語(yǔ)言進(jìn)階路上||遇見(jiàn)apply函數(shù)家族
【r<-高級(jí)|理論】apply,lapply,sapply用法探索

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末熙参,一起剝皮案震驚了整個(gè)濱河市艳吠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孽椰,老刑警劉巖昭娩,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異黍匾,居然都是意外死亡栏渺,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)锐涯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)磕诊,“玉大人,你說(shuō)我怎么就攤上這事纹腌⌒阒伲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵壶笼,是天一觀的道長(zhǎng)神僵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)覆劈,這世上最難降的妖魔是什么保礼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任沛励,我火速辦了婚禮,結(jié)果婚禮上炮障,老公的妹妹穿的比我還像新娘目派。我一直安慰自己,他們只是感情好胁赢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布企蹭。 她就那樣靜靜地躺著,像睡著了一般智末。 火紅的嫁衣襯著肌膚如雪谅摄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天系馆,我揣著相機(jī)與錄音送漠,去河邊找鬼。 笑死由蘑,一個(gè)胖子當(dāng)著我的面吹牛闽寡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尼酿,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼爷狈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了裳擎?” 一聲冷哼從身側(cè)響起淆院,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎句惯,沒(méi)想到半個(gè)月后土辩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抢野,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拷淘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片指孤。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡启涯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恃轩,到底是詐尸還是另有隱情结洼,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布叉跛,位于F島的核電站松忍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筷厘。R本人自食惡果不足惜鸣峭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一宏所、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摊溶,春花似錦爬骤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至拉岁,卻和暖如春坷剧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膛薛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工听隐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留补鼻,地道東北人哄啄。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像风范,于是被迫代替她去往敵國(guó)和親咨跌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 循環(huán)對(duì)于代碼運(yùn)行來(lái)說(shuō)是非常消耗時(shí)間和資源的硼婿,在R中锌半,要盡量少使用for while循環(huán),用apply函數(shù)族的話對(duì)于...
    willnight閱讀 3,472評(píng)論 0 2
  • 前言 在上一節(jié)中寇漫,我們主要介紹了 purrr 包提供的工具函數(shù)來(lái)減少 for 循環(huán)的使用刊殉,使代碼更加的簡(jiǎn)潔,便于閱...
    名本無(wú)名閱讀 714評(píng)論 0 6
  • 控制流 R語(yǔ)言的循環(huán)和控制流包括:if、else栓撞、 next遍膜、while、for等語(yǔ)句瓤湘。R語(yǔ)句的縮進(jìn)多用大括號(hào)瓢颅,如...
    井底蛙蛙呱呱呱閱讀 642評(píng)論 3 4
  • R語(yǔ)言提供了批量處理函數(shù),可以循環(huán)遍歷某個(gè)集合內(nèi)的所有或部分元素弛说,以簡(jiǎn)化操作挽懦。 這些函數(shù)底層是通過(guò)C來(lái)實(shí)現(xiàn)的,所以...
    小孟在充電閱讀 1,351評(píng)論 0 1
  • 在實(shí)際使用R時(shí)木人,for循環(huán)往往是最后的選擇巾兆。一般每次循環(huán)計(jì)算都是獨(dú)立的猎物,所以我們可以使用更簡(jiǎn)潔更方便的讀寫(xiě)方式來(lái)實(shí)...
    王詩(shī)翔閱讀 1,248評(píng)論 0 2