2009-09-30 4 views
1

У меня есть функция для вычисления обратного квадратичного уравнения. По умолчанию это дает два возможного решение:Как применить Min или Max к каждому результату функции отдельно?

invquad<-function(a,b,c,y,roots="both") 
{ 
    #Calculate the inverse of a quadratic function y=ax^2+bx+c (i.e. find x when given y.) 
    #Gives NaN with non real solutions. 
    root1<-sqrt((y-(c-b^2/(4*a)))/a)-(b/(2*a)) 
    root2<--sqrt((y-(c-b^2/(4*a)))/a)-(b/(2*a)) 
    if (roots=="both") 
     result<-c(root1,root2) 
    if (roots=="min") 
     result<-min(root1,root2) 
    if (roots=="max") 
     result<-max(root1,root2) 
    result 
} 

Это прекрасно работает, если дано одно значения у, но если я дам ему список или столбец из dataframe, то минимальные и максимальные элементы дай мне минимальное значение всего списка. Я хочу, чтобы он возвращал только минимальный результат для этого элемента. Я предполагаю, что повторение списка возможно, но оно не очень эффективно.

Любые идеи?

ответ

7

Заменить функцию min (max) по pmin (pmax):

> invquad(1,2,3,3,"min") 
[1] -2 
> invquad(1,2,3,4,"min") 
[1] -2.414214 
> invquad(1,2,3,c(3,4),"min") 
[1] -2.000000 -2.414214 
+0

Отлично! Просто то, что я искал .... – PaulHurleyuk

1

Посмотрите на plyr-package - он позволяет разбивать список/фрейм данных на более мелкие части, а затем применять вашу функцию к этому подмножеству.

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