Search code examples
rderivativesimplifyarithmetic-expressionsevaluate

simplify algebraic expressions in R


I would like to solve a first order condition given an expression in R. I have successfully taken the derivative but, I suspect because I am taking the derivative of a bunch of call objects. I cannot get my expressions to simplify.

In the example code below I outline three functions, combine them with arithmetic and then take the derivative with respect to my K variable. The associated output has also been placed below.

Q = quote(K^(a)*L^(1-a))
P = quote(wL+x)
MC = quote(wL+K)
eval(parse(text=R-MC))


profit = substitute(Q*(P-MC), list(Q=Q,P=P,MC=MC))
D(profit,'K')

Output:

K^((a) - 1) * (a) * L^(1 - a) * (wL + x - (wL + K)) - K^(a) * 
    L^(1 - a)

Note that the (wL + x - (wL + K)) in the above output ought to simplify to (x - K). While the output is correct, I am afraid that if I went much further or tried to solve for a particular first order condition, I want to be working with the most simplified expressions possible

My question: Is there a function or means by which I can simplify expressions either prior to or once they have been mathematically evaluated?

My desired output (or any algebraic equivalent):

K^((a) - 1) * (a) * L^(1 - a) * (x - K) - K^(a) * 
    L^(1 - a)

Solution

  • Using the Ryacas0 package (also see the Ryacas package) we can write:

    library(Ryacas0)
    
    der <- D(profit,'K')
    e <- as.expression(der)
    Simplify(e)
    

    giving:

    yacas_expression(K^(a - 1) * a * L^(1 - a) * x - K^(a - 1) * a * L^(1 - a) * K - L^(1 - a) * K^a)