Как применить функцию, которая выводит несколько средств столбцов для всех объектов фрейма данных в списке? - PullRequest
0 голосов
/ 11 января 2020

Я знаю, что это должен быть простой вопрос, но я продолжаю бороться с ним.

У меня есть этот список из 124 фреймов данных, который называется "kks"

Я хочу ввести каждый один из 124 фреймов данных в следующую функцию:

mytest_function <- function(df){
data.numcols <- df[, sapply(df, is.numeric)]
all.means <- apply(data.numcols, 2, mean)
all.means <- colMeans(data.numcols)
all.means
}

По сути, я хочу, чтобы средние значения каждого столбца во всех 124 фреймах данных из списка фреймов данных.

Я пробовал:

lapply(kks,mytest_function(df))

И:

lapply(kks,mytest_function(kks))

и я не могу понять это. Я продолжаю получать сообщения об ошибках, говорящие «Error in colMeans(df) : 'x' must be an array of at least two dimensions»

Что мне делать отсюда?

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Я думаю, вы также можете использовать purrr::map() вместе с dplyr::summarise_if(), в зависимости от желаемого формата вывода. Это также устранит необходимость в вашей пользовательской функции.

library(purrr)
library(dplyr)

kks %>%
  map(summarise_if, .predicate = is.numeric, .funs = mean)

Использование mtcars в качестве образца данных.

library(purrr)
library(dplyr)

kks <- list(mtcars, mtcars, mtcars)

kks %>%
  map(summarise_if, .predicate = is.numeric, .funs = mean)

[[1]]
       mpg    cyl     disp       hp     drat      wt     qsec     vs      am   gear
1 20.09062 6.1875 230.7219 146.6875 3.596563 3.21725 17.84875 0.4375 0.40625 3.6875
    carb
1 2.8125

[[2]]
       mpg    cyl     disp       hp     drat      wt     qsec     vs      am   gear
1 20.09062 6.1875 230.7219 146.6875 3.596563 3.21725 17.84875 0.4375 0.40625 3.6875
    carb
1 2.8125

[[3]]
       mpg    cyl     disp       hp     drat      wt     qsec     vs      am   gear
1 20.09062 6.1875 230.7219 146.6875 3.596563 3.21725 17.84875 0.4375 0.40625 3.6875
    carb
1 2.8125
0 голосов
/ 11 января 2020

apply с полем 2 и colMeans делают одно и то же. Вы можете использовать любой из них

mytest_function <- function(df){
   data.numcols <- df[, sapply(df, is.numeric)]
   colMeans(data.numcols, na.rm = TRUE)
}

и использовать lapply

output <- lapply(kks, mytest_function)

Вы также можете использовать summarise_if из dplyr библиотеки

library(dplyr)

mytest_function <- function(df){
   df %>% summarise_if(is.numeric, mean, na.rm = TRUE)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...