2013-02-15 5 views
2

Я пытаюсь применить групповую функцию, используя ddply. Мои данные выглядит следующим образом:Применение функции в ddply

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

Следующая функция вычисляет значение х при у = 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

Оба кода отсутствуют '' 'после' summaryise' – Arun

ответ

2

Я думаю, что вы должны назвать ddply таким образом:

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

IIUC, если вы обратитесь к функции перехвата с Data$Days и Data$Diff в качестве аргументов, целые векторы будут переданы в функция каждый раз. С Days и Diff используются только значения, соответствующие текущему подмножеству Data.

+0

Спасибо, Джуба, это работает – allardvinc

+0

@ user2075072 Если он решил вашу проблему, вы можете проверить зеленую метку, чтобы показать ее другим пользователям. – juba

+2

@ user2075072, важно отметить разницу juba, касающуюся доступа к столбцам вашего data.frame как 'variables' внутри' summaryise'. Иначе вы возьмете всю колонку. И вы должны отметить это как ответ. – Arun

Смежные вопросы