代码之家  ›  专栏  ›  技术社区  ›  PaulHurleyuk

如何分别对函数的每个结果应用最小值或最大值?

  •  1
  • PaulHurleyuk  · 技术社区  · 16 年前

    我有一个函数来计算二次方程的逆。默认情况下,它提供两种可能的解决方案:

    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
    }
    

    如果给它一个值y,这是很好的,但是如果我给它一个列表或一个数据帧中的列,那么最小和最大元素会给我整个列表的最小值。我希望它只返回该元素的最小结果。我假设迭代列表是可能的,但是它不是很有效。

    有什么想法吗?

    2 回复  |  直到 16 年前
        1
  •  7
  •   rcs    16 年前

    替换 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
    
        2
  •  1
  •   learnr    16 年前

    看看 plyr-package -它允许将一个列表/数据帧分解成更小的片段,然后将您的函数应用于该子集。

    推荐文章