Возвращает результаты функции из списка с другой структурой данных. (используя функцию lapply или sapply) - PullRequest
1 голос
/ 05 февраля 2020

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

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

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

Ответы [ 3 ]

3 голосов
/ 05 февраля 2020

Вы можете использовать рекурсив 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 голосов
/ 05 февраля 2020

Может быть как то так?

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
0 голосов
/ 05 февраля 2020

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

library(purrr)
library(psych)
map(.x = mylist, .f = ~psych::describe(.x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...