apply、lapply、sapply和replicate应用

一、apply

apply(
    X,  # 数组、矩阵、数据框
    MARGIN,  # 1按行、2按列、c(1,2)同时按行和列
    FUN,  # 施加于行或列的函数
    ...)# FUN的附加参数

举例:

x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
dimnames(x)[[1]] <- letters[1:8]
x
#  x1 x2
#a  3  4
#b  3  3
#c  3  2
#d  3  1
#e  3  2
#f  3  3
#g  3  4
#h  3  5

apply(x, 2, mean)
# x1 x2 
#  3  3 

apply(x, 2, sort)
#     x1 x2
#[1,]  3  1
#[2,]  3  2
#[3,]  3  2
#[4,]  3  3
#[5,]  3  3
#[6,]  3  4
#[7,]  3  4
#[8,]  3  5

二、lapply

lapply(
    X,  #向量或列表
    FUN, #施加于X中每个元素的函数
    ...) #FUN的附加参数

lapply会返回一个与X具有相同长度的列表。举例:

tmp = lapply(x, as.character)
tmp
#[[1]]
#[1] "3"

#[[2]]
#[1] "3"

#[[3]]
#[1] "3"
#后面结果我省略了
class(tmp) #查看tmp类型为列表
#[1] "list"

三、sapply

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

sapply是lapply的一个变体,用起来更方便,它会返回一个向量或矩阵,而不是列表sapply(x, f, simplify = FALSE, USE.NAMES = FALSE)等同于lapply(x, f)。举例:

tmp2 <- sapply(x,as.character)
tmp2
# [1] "3" "3" "3" "3" "3" "3" "3" "3" "4" "3" "2" "1" "2" # "3" "4" "5"
class(tmp2)
#[1] "character"

四、replicate

replicate(
    n, #数值:代表要重复的次数
    expr,  #要重复求值的表达式
    simplify = "array")

replicate是sapply的一个变体,用于对一个表达式进行重复求值(这通常涉及随机数的生成)。举例:

replicate(20, mean(rnorm(10))) #随机生成符合正态分布的的10个数求平均值,再把该过程重复20次
# [1] -0.16991042 -0.48814247 -0.15974617 -0.04962954  #0.15945067
# [6] -0.24717244 -0.16891641 -0.73591569  0.41282610  #0.31573646
#[11]  0.45103341  0.26704406 -0.14040780 -0.16512758  #0.09814767
#[16]  0.51196283 -0.29155559  0.37325168  0.13969860  #0.25289411
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容