Как я могу иметь дело с функцией, которая возвращает список при использовании суммирования - PullRequest
0 голосов
/ 09 мая 2019

Мне нужно применить функцию normalmixEM () из библиотеки mixtools к сгруппированным данным. Однако normalmixEM () возвращает объект, который не нравится summarise_all.

В идеале я хотел бы вернуть список, который затем можно разбить на следующем шаге. В противном случае разбейте каждое нужное мне возвращаемое значение на свои собственные столбцы.

stattest - это фрейм данных с тремя столбцами, который выглядит примерно так:

Sample, year, x
1 ,    2017,  43
1 ,    2017,  23
1 ,    2017,  19
1 ,    2018,  26
1 ,    2018,  16
2 ,    2017,  63
2 ,    2017,  25
2 ,    2018,  22

Вот что я пытаюсь:

BiModality <- stattest %>%
  group_by(Sample,year) %>%
  summarise_all(funs(     
      try(normalmixEM(x, eps=1e-03, arbmean=TRUE,mu=c(mean(x)*0.7,mean(x)*1.3)), silent=TRUE) )
   )

Что приводит к ошибке Столбец x должен иметь длину 1 (итоговое значение), а не 9

Итак, я попытался вернуть одно значение:

BiModality <- stattest %>%
  group_by(Sample,year) %>%
 summarise_all(funs(

      try(normalmixEM(x, eps=1e-03, arbmean=TRUE,mu=c(mean(x)*0.7,mean(x)*1.3))$lambda[1], silent=TRUE) )
   )

, который приближает меня, но в конечном итоге не говорит: Ошибка: столбец x не может преобразовать группу 13 в числовой

Идеальный сценарий - я получаю новый фрейм данных:

Sample, Year, MxMdl
1 , 2017, [object that I can access subvariables of]
1, 2018, [object]
...

но, если необходимо, вывод формы:

Sample, Year, Lambda1, Lamba2, Mu1, Mu2, Sigma1, Sigma2
1, 2017, 0.6, 0.4, 3.2, 4.1, 0.76, 0.63
...

тоже было бы неплохо.

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