2011-10-28 24 views
5

我有這樣的功能:強迫使用一個新數據幀的多輸出ddply

> λ.est <- function(x){ 
      mle.optim <- mle2(paretoNLL,start=list(λ=-0.7),data=list(x=x),trace=TRUE) 
      return(summary(mle.optim)@coef[1,1:4]) 
      } 

適合分配和retuns參數估計,標準。錯誤,z值和我的模型的p。 我有這個功能適用於因子pond,habitat,treatment,date的組合來定義我的原始數據幀size的不同子集,而要做到這一點我使用的ddply功能:

> mle.λ <- ddply(size, .(pond,habitat,treatment,date), 
    summarise, λ=λ.est(x=mass.wei)) 

的問題是,這樣做這一點,我只能一列的時間添加到新的數據幀mle.λ,wereas我需要添加到mle.λ 4個新列,每一個的λ.est 基本的東西的輸出看起來像這樣:

> mle.λ 
     pond habitat treatment date estimate std. error z value Pr(z) 
     - -  -  -  -  -   -  - 
     - -  -  -  -  -   -  - 
     - -  -  -  -  -   -  - 
     - -  -  -  -  -   -  - 
     - -  -  -  -  -   -  - 
     ... 

到目前爲止我我一直在爲每個需要的輸出寫一個不同的函數,但我想要做一些代碼經濟......有什麼辦法可以一次完成這一切嗎?

感謝 利瑪竇

回答

5

既然你已經有一個彙總功能,您無需另外使用summarise功能。此外,它可以一次返回多於一個的輸出,它可以是。由於沒有數據。例如,這裏是一個應該明確表示出如何做到這一點:

n = 20 
set.seed(12345) 
data = data.frame(cbind(pond=1:2, habitat=1:3, value = rnorm(n))) 
> ddply(data, .(habitat, pond), function(x) summary(x$value)) 
    habitat pond Min. 1st Qu. Median Mean 3rd Qu. Max. 
1  1 1 0.3706 0.5318 0.6078 0.6767 0.7528 1.1210 
2  1 2 -0.9193 -0.6864 -0.4535 -0.1853 0.1817 0.8169 
3  2 1 -0.8864 -0.5013 -0.1162 -0.1322 0.2448 0.6059 
4  2 2 -0.2762 0.1550 0.4095 0.3131 0.5675 0.7095 
5  3 1 -0.7505 -0.5173 -0.2842 -0.3813 -0.1967 -0.1093 
6  3 2 -1.8180 -1.0750 -0.3316 -0.1107 0.7429 1.8170 
+0

真的appriciated約翰,因爲不是總是直截了當得多,雖然我還是......有進軍了很多的R路線.. – matteo

+0

太棒了!我很高興它有幫助。 –

相關問題