Claudio Moneo
Claudio Moneo

Reputation: 569

Applying function on vector in R

I am fairly new to programming in R and I am wondering why this does not work:

w <- c(1,0)
deriv(~x^2+y,c("x","y"),function.arg = TRUE)(w)

I really want to apply the function produced by deriv() on a variable w. Maybe some background on how to deal with these kinds of "macros" might be helpful...

Upvotes: 1

Views: 65

Answers (2)

Parfait
Parfait

Reputation: 107567

Your function exposes two non-default parameters but you only pass one argument. Below would work, if this is your intention:

w <- c(1,0)

deriv( ~ x^2 + y, c("x","y"), function.arg = TRUE)(w, w)
# [1] 2 0
# attr(,"gradient")
#      x y
# [1,] 2 1
# [2,] 0 1

Alternatively, set up a default parameter:

w <- c(1,0)

deriv( ~ x^2 + y, c("x","y"), function.arg = function(x, y=2){})(x=w)

# [1] 3 2
# attr(,"gradient")
#      x y
# [1,] 2 1
# [2,] 0 1

# MORE READABLE VERSION WITH identity()
myfunc <- deriv( ~x^2 + y, c("x","y"), func = function(x, y=2) identity(x,y))
myfunc(x=w)

Upvotes: 0

akrun
akrun

Reputation: 886938

We can use do.call and pass the 'w' as a list of arguments

do.call(deriv(~x^2+y,c("x","y"),function.arg = TRUE), as.list(w))

Upvotes: 1

Related Questions