「advanced R」10 函数式编程

2020-05-14  本文已影响0人  一路向前_莫问前程_前程似锦

lapply是采用C实现的,算法本质相同,由于lapply以函数作为输入,所以他也是一个泛函. 由于数据框也是列表,所以可以用lapply
函数都有 formals()、body()、和父environment

image.png

函数式编程的三个组件: 匿名函数/闭包、函数列表

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))
上一篇下一篇

猜你喜欢

热点阅读