lapply是采用C实现的,算法本质相同,由于lapply以函数作为输入,所以他也是一个泛函
. 由于数据框也是列表,所以可以用lapply
函数都有 formals()、body()、和父environment
函数式编程的三个组件: 匿名函数/闭包、函数列表
i <- 0
new_counter2 <- function(){
i <<- i+1
i
}
new_counter2()
new_counter3
compute_mean <- list(
base=function(x) mean(x),
sum=function(x) sum(x)/length(x),
manual=function(x){
total=0
n=length(x)
for (i in seq_along(x)) {
total=total+x[[i]]
}
total=total/n
total
}
)
x <- runif(1000000)
compute_mean$manual(x)
compute_mean$base(x)
compute_mean$manual(x)
lapply(compute_mean, function(f) f(x))
lapply(compute_mean, function(f) system.time(f(x)))
# 多方面汇总
fun <- list(
sum=sum,
mean=mean,
median=median
)
lapply(fun, function(f) f(x))
# 去掉缺失值
lapply(fun, function(f) f(x, na.rm=T))
网友评论