У меня есть набор данных с тремя группирующими переменными: условие, подпрограмма и задержка. Вот упрощенная версия моих данных (реальные данные намного длиннее)
sub condition delay later_value choiceRT later_choice primeRT cue
10 SIZE 10 27 1832 1 888 CHILD
10 PAST 5 11 298 0 1635 PANTS
10 SIZE 21 13 456 0 949 CANDY
11 SIZE 120 22 526 1 7963 BOY
11 FUTURE 120 27 561 1 4389 CHILDREN
11 PAST 5 13 561 1 2586 SPRING
У меня сложный набор процедур для применения к этим данным (детали не важны)
Я написал следующую функцию, которая выполняет то, что я хочу, при разделении на три группы переменных. Он возвращает 3 переменные, которые меня интересуют (indiff, p_intercept, & p_lv)
getIndiffs <- function(currdelay){
if (mean(currdelay$later_choice) == 1) {
indiff = 10.5
p_intercept = "laters"
p_lv = "laters"
}
else if (mean(currdelay$later_choice) == 0) {
indiff = 30.5
# no p-val here, code that this was not calculated
p_intercept = "nows"
p_lv = "nows"
}
else {
F <- factor(currdelay$later_choice)
fit <- glm(F~later_value,data=currdelay,family=binomial())
indiff <- -coef(fit)[1]/coef(fit)[2]
if (indiff < 10) indiff = 10.5
else if (indiff > 30) indiff = 30.5
p_intercept = round(summary(fit)$coef[, "Pr(>|z|)"][1],3)
p_lv = round(summary(fit)$coef[, "Pr(>|z|)"][2], 3)
c(indiff,p_intercept,p_lv)
}
Я пытаюсь использовать ddply, чтобы применить его к каждому подмножеству данных в соответствии с 3 переменными группировки:
ddply (данные,. (Суб, состояние, задержка), getIndiffs)
Однако, когда я запускаю это, я получаю ошибку
Ошибка в list_to_dataframe (res, attr (.data, "split_labels")):
Результаты не имеют одинаковую длину
Странно, это нормально работает, когда я использую только 1 группирующую переменную, но выдает ошибку с 2 +
Кроме того, когда я сам "имитирую" разбиение набора данных на драму данных, содержащую только подмножество, разделенное на 3 группирующие переменные, моя функция работает просто отлично. (Примечание: я пробовал разные способы вернуть 3 переменные или даже вернуть только 1 переменную, и она тоже не работает)
По сути, я хочу знать, как использовать plyr для использования функции, возвращающей несколько переменных.
Любые другие решения моей проблемы, которые принципиально отличаются, также приветствуются.