Вложенный фрейм данных

У меня техническая проблема, которую, кажется, я не могу решить самостоятельно. Я провел оценку с помощью пакета mcmcglmm. По результатам $ Sol я получаю доступ к оценкам апостериорных распределений. Применение class () говорит мне, что объект относится к классу «mcmc». Использование as.data.frame () приводит к созданию вложенного фрейма данных, который содержит другие фреймы данных (один фрейм данных содержит множество других фреймов данных). Я хотел бы rbind () все фреймы данных в основном фрейме данных, чтобы создать один фрейм данных (или, скорее, вектор) со всеми значениями всех апостериорных распределений и именем (вторичного) data frame как rowname., есть идеи? Буду благодарен за каждую подсказку!

Обновление: мне не удалось создать полезный набор данных для целей stackoverflow, со всеми этими цепочками выборки эти наборы данных всегда были бы слишком большими. Если вы хотите мне помочь, рассмотрите возможность запуска следующей (примерной) модели

require(MCMCglmm)
data(PlodiaPO)
result <- MCMCglmm(PO ~ plate + FSfamily, data = PlodiaPO, nitt = 50, thin = 2, burn = 10, verbose = FALSE)

result $ Sol (объект mcmc) - это место, где хранятся все цепочки. Я хочу связать все цепочки, чтобы иметь вектор со всеми значениями всех апостериорных распределений и именами переменных как rownames (или поскольку не допускаются повторяющиеся rownames, как дополнительный вектор символов).


person chameau13    schedule 04.09.2013    source источник
comment
as.data.frame(model1): Ошибка в as.data.frame.default (model1): не удается преобразовать класс MCMCglmm в data.frame. Как ты это сделал?   -  person Metrics    schedule 04.09.2013
comment
@Metrics Я полагаю, они имели в виду именно компонент $ Sol, поскольку это класс mcmc, а не MCMCglmm   -  person Joe    schedule 04.09.2013
comment
Введите ?, а затем имя функции, которая сгенерировала results. Проверьте раздел подробностей; обычно пакетная документация объясняет, как получить доступ к компонентам их конкретных объектов.   -  person Ferdinand.kraft    schedule 04.09.2013
comment
@Metric: Джо прав, результаты $ Sol - это объект mcmc, к которому можно применить as.data.frame.   -  person chameau13    schedule 04.09.2013
comment
@Joe Пожалуйста, посмотрите мой отредактированный вопрос! Спасибо!   -  person chameau13    schedule 05.09.2013


Ответы (1)


Я не могу (используя пример кода из MCMCglmm) построить пример, в котором as.data.frame (модель $ Sol) дает мне фрейм данных фреймов данных. Так что, хотя, вероятно, есть простой ответ, я не могу его легко проверить.

Тем не менее, вот пример, который может помочь. Обратите внимание: если у ваших дочерних фреймов данных разные имена столбцов, это не сработает.

# create a nested data.frame example to work on
a.df <- data.frame(c1=runif(10),c2=runif(10))
b.df <- data.frame(c1=runif(10),c2=runif(10))
full.df <- data.frame(1:10)
full.df$a <- a.df
full.df$b <- b.df
full.df <- full.df[,c("a","b")]

# the solution
res <- do.call(rbind,full.df)

ИЗМЕНИТЬ

Хорошо, используя ваш новый пример,

require(MCMCglmm) 
data(PlodiaPO) 
result<- MCMCglmm(PO ~ plate + FSfamily, data=PlodiaPO,nitt=50,thin=2,burn=10,verbose=FALSE)
melt(do.call(rbind,(as.data.frame(result$Sol))))
person Joe    schedule 04.09.2013
comment
похоже, это не работает. Я постараюсь привести воспроизводимый пример, когда вернусь домой. большое вам спасибо! - person chameau13; 04.09.2013
comment
Ты привел меня на верный путь! Большое спасибо! Когда вы также применяете melt () к результату предлагаемого решения, он дает то, что я хотел: кадр с апостериорными распределениями всех параметров и вектор с именами параметров. Если вы измените свой ответ соответствующим образом, я помечу его как правильный, и вы получите баллы. (извините, если мой вопрос запутал) - person chameau13; 05.09.2013