2016-07-06 2 views
0

У меня есть набор наблюдений для многих предметов, и я хотел бы подгонять модель для каждого предмета. .R - Установка модели для каждого объекта с использованием data.table или dplyr

я "использую пакеты data.table и fitdistrplus, но может также попытаться использовать dlpyr

Say мои данные этой формы:

#subject_id #observation 
1   35 
1   38 
2   44 
2   49 

Вот что я пытался до сих пор:

subject_models <- dt[,fitdist(observation, "norm", method = "mme"), by=subject_id] 

Это приводит к ошибке, я думаю, потому что вызов fitdist возвращает fitdist о bject, который невозможно сохранить в datatable/dataframe.

Есть ли интуитивный способ сделать это, используя data.table или dplyr?

EDIT: Ответ на dplyr был предоставлен, но я также благодарен за таблицу data.table, я попытаюсь выполнить некоторые тесты против двух.

+1

Стик модель в списке , пока вы не сможете его упростить. [Вот видео о том, как это сделать в tidyverse.] (Http://edinbr.org/edinbr/2016/05/11/may-Hadley-Update2-PostingTalk.html) – alistaire

ответ

2

Это может быть легко достигнуто с помощью purrr пакета

я принимаю его то же самое @alistaire предложил

library(purrr) 
library(dplyr) 
library(fitdistrplus) 
dt %>% split(dt$subject_id) %>% map(~ fitdist(.$observation, "norm", method = "mme")) 

В качестве альтернативы, без purrr,

dt %>% split(dt$subject_id) %>% lapply(., function(x) fitdist(x$observation, "norm", method = "mme")) 
+0

Спасибо за ответ @Sumedh. Есть ли простой способ распараллеливать вызов карты внутри R/dplyr? – Bar

+0

@Bar, мне недостаточно расслоения в R, чтобы ответить – Sumedh

+0

@Bar за ваш комментарий о том, как распараллелить - вы можете открыть новый вопрос, показывая эту технику, а затем показывая, что вы пытались как попытку распараллеливание. – JasonAizkalns

Смежные вопросы