2
votes

I'm tryin to apply a group-wise function using ddply. My data looks like that:

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

The following function calculates x value for 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)
}

then I try to apply this by group with ddply:

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

My grammar must be wrong since it does no not return a output with a similar format than :

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

I think there is something wrong with the way I call my function variables but I don't see where... Any help welcome. All the best, Vincent

1
Both your code are missing a , after summariseArun

1 Answers

2
votes

I think you should call ddply this way :

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

IIUC, if you call your intercept function with Data$Days and Data$Diff as arguments, the whole vectors will be passed to the function each time. With Days and Diff, only the values corresponding to the current subset of Data is used.