Problem with R function

base-r

#1

Hi,
I've a problem with this function:
k <- function(x){
if(x > 0) {2exp(-2x)}
if(x < 0) {0*x}
}

I can't integrate it like I want:

integrate(k, -Inf, +Inf)

It gives this error:
Error in integrate(k, -Inf, +Inf) :
evaluation of function gave a result of wrong length
In addition: Warning messages:
1: In if (x > 0) { :
the condition has length > 1 and only the first element will be used
2: In if (x < 0) { :
the condition has length > 1 and only the first element will be used

Can somebody help me to write it right?


#2

You've done a couple of things that are impermissible in R coding.

First, 2x is not a valid way to express multiplication. You must use 2 * x.

Second, if requires a single logical value. To do a conditional over a vector you must use either ifelse or indexing.

You may want to redefine k as

k <- function(x){
  ifelse(x > 0, 2 * exp(-2 * x), 0)
}

Or, slightly more efficient, using indexing

k <- function(x){
  positive <- x > 0
  x[positive] <- 2 * exp(-2 * x[positive])
  x[!positive] <- 0
  x
}

#3

When I cut pasted it hadn't taken *.

You've resolved my problem. Thanks!!!

:grin: