Использование функции в функции - PullRequest
0 голосов
/ 05 мая 2020

Использование R и пакета dplyr:

У меня есть функция (назовем ее x ), которую я написал, которая принимает столбец и кадр данных в качестве параметров и возвращает список сводной информации о столбце. Теперь я хочу создать новую функцию (назовем ее y ), которая принимает фрейм данных в качестве параметра и возвращает список информации для каждого столбца. (где ключи возвращенного списка - это имена столбцов, а значения - сводная информация, возвращаемая функцией x .

Я уже написал функцию x, хотя у меня проблемы с функцией y. Думаю, она должна выглядеть примерно так:

y <- function(data_frame) {
  lapply(data_frame, x)
}

, но я не знаю, откуда go здесь. Я знаю, что мне нужно использовать * apply, но я не знаю, как написать функцию y, чтобы функция x применялась к каждому столбцу в моем фрейме данных. Может ли кто-нибудь помочь с тем, как моя функция y должна быть написана по-другому?

1 Ответ

1 голос
/ 05 мая 2020

Давайте работать с реальным набором данных, числовые c столбцы iris.

@library(tidyverse)
myIris <- iris %>% 
  select(- "Species")

Для вашей функции x возьмите mean

x <- function(df, col){
  df[[col]] %>% mean()
}

Работает?

x(myIris, "Sepal.Length")
[1] 5.843333

Для вашего y

y <- function(df){
  tibble(KEYS = names(df)) %>% 
    mutate(VALUES = map_dbl(KEYS, ~ x(df, .x)))
}

Взять на спин

y(myIris)
# A tibble: 4 x 2
  KEYS         VALUES
  <chr>         <dbl>
1 Sepal.Length   5.84
2 Sepal.Width    3.06
3 Petal.Length   3.76
4 Petal.Width    1.20

Вы это имели в виду?

...