Как работает sapply в приведенном ниже примере? - PullRequest
0 голосов
/ 09 марта 2019
sapply(list(runif (10), runif (10)), 
       function(x) c(min = min(x), mean = mean(x), max = max(x)))

Почему приведенный выше код дает матрицу из 3 строк и 2 столбцов, а не 2 строк и 3 столбцов?

1 Ответ

0 голосов
/ 09 марта 2019

Редактировать (оригинальный ответ с пояснениями ниже) :

Мы можем использовать ldply из plyr, поскольку это напрямую дает нам data.frame объект.

plyr::ldply(list(runif(10),runif(10)),
            function(x) c(Min=min(x),Mean=mean(x),Max=max(x)))


  #         Min      Mean       Max #No seed
   # 1 0.03964594 0.3960042 0.7345305
   # 2 0.05233872 0.3811633 0.9713190

Оригинал:

Составляет список из двух компонентов:

list(runif(10),runif(10))

Из каждого списка мы находим минимальное, максимальное и среднее значение, следовательно, выходные данные. Чтобы понять почему, попробуйте запустить это в одиночку:

sapply(list(runif (10)), function(x) c(min = min(x), mean = mean(x), max = max(x)))

Если вы измените аргумент simplify, вы можете получить вывод, который вы хотите (я предполагаю) иметь:

sapply(list(runif (10)), function(x) c(min = min(x), mean = mean(x), max = max(x)),
       simplify = F)

 #[[1]]
 #         min      mean       max #No seed
 #  0.2482040   0.4845170 0.8294896 

ПРИМЕЧАНИЕ :: Вам необходимо set.seed для воспроизводимости.

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