2013-02-15 27 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

相关问题