我有一個數據集有三個分組變量:condition,sub,& delay。這是我的數據的簡化版本(實際數據是更長的時間)在R中使用Plyr與一個複雜的函數,返回多個變量
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(。數據「split_labels」)): 結果不具有相等的長度
奇怪的是,當我只用1分組變量這個工作正常,但投用2錯誤+
此外,當我「模擬」將數據集自己拆分爲只包含由3個分組變量分割的子集的數據drame時,我的函數工作得很好。 (注:我已經嘗試了不同的方式返回3個變量,甚至只返回1個變量,但它也不起作用)
基本上,我想知道的是如何使用plyr來使用函數返回多個變量。
對我的問題有任何其他解決方案也是根本不同的,也是值得歡迎的。
啊!謝謝。看起來它可能已經歸結爲一個愚蠢的錯字,但這是一個有用的調試技巧 –