2013-02-15 24 views
2

我正在嘗試使用ddply應用一個group-wise函數。 我的數據看起來像這樣:在ddply中應用一個函數

https://echange-fichiers.inra.fr/get?k=b1jD63CWkT93hDsbZ0g

下面的函數計算x值Y = 0

intercept=function (x,y){ 

    if (length(y[y==0])==0){ 
     x1=min(x[y >0]) 
     y1=min(y[y >0]) 

     x2=max(x[y <0]) 
     y2=max(y[y <0]) 

     p =(y2-y1)/(x2-x1) 

     x0= -y1/p + x1 

    }else{ 
     x0=x[y==0] 

    } 
return(x0) 
} 

然後我嘗試通過組ddply應用此:

zzz=ddply(Data,.(Genotype,T), summarise 
     InterDays=(intercept(Data$Days,Data$Diff)) 
) 

我的語法一定是錯誤的,因爲它不會返回類似格式的輸出:

zzz=ddply(DataAll,.(Genotype,T), summarise 
     InterDays=mean(DataAll$Days) 
) 

我覺得我叫我的函數變量的方式有問題,但我不知道在哪裏... 任何幫助歡迎。 一切順利, 文森特

+1

您的代碼在'summarise'後面缺少一個',' – Arun 2013-02-15 10:48:26

回答

2

我想你應該叫ddply這樣:

ddply(Data,.(Genotype,T), summarise, 
     InterDays=(intercept(Days,Diff)) 
) 

IIUC,如果你有Data$DaysData$Diff作爲參數調用你的攔截功能,整個矢量將被傳遞到每次都有功能。使用DaysDiff,僅使用對應於當前子集Data的值。

+0

謝謝朱巴它的工作 – allardvinc 2013-02-15 10:55:12

+0

@ user2075072如果它解決了您的問題,您可以檢查綠色標記以顯示給其他用戶。 – juba 2013-02-15 11:12:52

+2

@ user2075072,重要的是要注意juba提到的關於在'summarise'內訪問data.frame的列作爲'variables'的區別。否則你正在整個專欄。你應該把它標記爲已回答。 – Arun 2013-02-15 11:39:23

相關問題