Я борюсь со списком.

У меня есть список с другой структурой данных, как показано ниже

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, используя

lapply или sapply функция. как lapply(mylist, function(x) mean(x) )

Но вот моя проблема. dat3 в mylist - это фрейм данных, в котором есть две переменные, но функции lapply и sapply возвращают только одно максимальное и среднее значения.

Результаты, которые я хочу получить:

 $dat1             
    max    mean 
     9       7
 $dat2
    max   mean
     116    83
 $dat3
      a              b
    max mean     max mean 
     4   2.5      2   0.5
1
wan 5 Фев 2020 в 11:15

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
2
user2974951 5 Фев 2020 в 08:19

Другой вариант

library(purrr)
library(psych)
map(.x = mylist, .f = ~psych::describe(.x))
0
Yuriy Saraykin 5 Фев 2020 в 09:01