美文网首页
「advanced R」10 函数式编程

「advanced R」10 函数式编程

作者: 一路向前_莫问前程_前程似锦 | 来源:发表于2020-05-14 09:18 被阅读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))
    

    相关文章

      网友评论

          本文标题:「advanced R」10 函数式编程

          本文链接:https://www.haomeiwen.com/subject/udygnhtx.html