Применить список функций к одной матрице и сохранить имена функций - PullRequest
1 голос
/ 15 февраля 2020

Моя конечная цель - собрать список сводной статистики для столбцов data.frame или matrix. Например, если бы у меня был data.frame с тремя переменными / столбцами, я мог бы узнать среднее, медиану и стандартное отклонение каждого столбца. То, что я хотел бы сделать, это иметь функцию, которая принимает произвольный список функций. Я знаю, что что-то вроде этого подойдет

summarise = function(x, stats = list(mean, median, sd, length)){
     lapply(stats, function(stat){apply(x, 2, stat)})
}

, но как я могу пометить элементы результатов именем примененной статистики / функции? Например, если x равно

x = matrix(1:9, nc = 3)

, то как мне написать свою функцию summarise, чтобы в результате я получил

> summarise(x)
$mean
[1] 2 5 8

$median
[1] 2 5 8

$sd
[1] 1 1 1

$length
[1] 3 3 3

?

1 Ответ

1 голос
/ 15 февраля 2020

Простой вариант - иметь именованный вывод в функции summarise ОП

summarise <- function(x, stats = list(mean = mean, median = median,
       sd = sd, length = length)){
         lapply(stats, function(stat){apply(x, 2, stat)})
   }

summarise(x)
#$mean
#[1] 2 5 8

#$median
#[1] 2 5 8

#$sd
#[1] 1 1 1

#$length
#[1] 3 3 3

Или, если мы используем dplyr::lst или purrr::lst, он автоматически переименует list элементы

summarise <- function(x, stats = dplyr::lst(mean, median,
       sd, length)){
         lapply(stats, function(stat){apply(x, 2, stat)})
   }

summarise(x)
#$mean
#[1] 2 5 8

#$median
#[1] 2 5 8

#$sd
#[1] 1 1 1

#$length
#[1] 3 3 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...