【问题标题】:Returns function results from list with different data structure. (using lapply or sapply function)从具有不同数据结构的列表中返回函数结果。 (使用 lapply 或 sapply 功能)
【发布时间】:2020-05-21 02:46:56
【问题描述】:

我正在为列表而苦苦挣扎。

我有一个不同数据结构的列表,如下所示

mylist<-list(dat1=c(rep(5:9, times=2)), dat2=seq(50,120,by=6), dat3=data.frame(a=c(1:4),b=c(-1:2)))

我想要做的是通过使用

将函数应用于 mylist 的每个元素

lapplysapply 函数。 喜欢lapply(mylist, function(x) mean(x) )

但这是我的问题。 mylist 中的 dat3 是数据框,它有两个变量,但 lapplysapply 函数只返回一个最大值和平均值。

输出我想要得到的是

 $dat1             
    max    mean 
     9       7
 $dat2
    max   mean
     116    83
 $dat3
      a              b
    max mean     max mean 
     4   2.5      2   0.5

【问题讨论】:

    标签: r list lapply sapply


    【解决方案1】:

    你可以使用递归lapply(rapply)

    rapply(mylist, function(x) c(max = max(x), mean = mean(x)), how = "list")
    
    #$dat1
    # max mean 
    #   9    7 
    
    #$dat2
    # max mean 
    # 116   83 
    
    #$dat3
    #$dat3$a
    # max mean 
    # 4.0  2.5 
    
    #$dat3$b
    # max mean 
    # 2.0  0.5 
    

    【讨论】:

      【解决方案2】:

      也许是这样的?

      lapply(mylist,function(x){
        lapply(data.frame(x),function(y){
          data.frame(max=max(y),mean=mean(y))
        })
      })
      
      $dat1
      $dat1$x
        max mean
      1   9    7
      
      
      $dat2
      $dat2$x
        max mean
      1 116   83
      
      
      $dat3
      $dat3$a
        max mean
      1   4  2.5
      
      $dat3$b
        max mean
      1   2  0.5
      

      【讨论】:

      • 是的,这就是我想要的。我分别复制你的代码,比如tmp&lt;-lapply(mylist,data.frame),然后是lapply(tmp,function(y){data.frame(max=max(y),mean=mean(y))})。但我在某些专栏中得到了“NAs”。你知道这是为什么吗?
      • @wan 一定是数据里的东西,有没有缺失值或者非数字值?
      • 不,我使用上面描述的mylist。你试过代码tmp&lt;-lapply(mylist,data.frame) and then lapply(tmp,function(y){data.frame(max=max(y),mean=mean(y))})吗??
      • @wan 我明白了,你的代码和我的不一样——它改变了数据的结构,所以它不再起作用了。
      【解决方案3】:

      另一种选择

      library(purrr)
      library(psych)
      map(.x = mylist, .f = ~psych::describe(.x))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-20
        • 2021-10-13
        • 2018-08-04
        • 2019-06-19
        • 2019-07-07
        • 1970-01-01
        • 2021-05-08
        • 1970-01-01
        相关资源
        最近更新 更多