Skip to content
Prev 146045 / 398500 Next

help understanding why #function(x, y) (if((x-y)>=0) {2^(x-y)} else{-(2^abs(x-y))})# doesn't work likeI think it should

Hi Alan,
You probably want to use ifelse() instead of if()

folds <- function(x, y) (ifelse( ((x - y) >= 0), 2^(x - y), -(2^abs(x - y))))

x <- c(5,6,4,3,5,3,1)
y <- c(1,6,2,1,7,1,9)
folds <- function(x, y) (ifelse( ((x - y) >= 0), 2^(x - y), -(2^abs(x - y))))
z <- folds(x, y)
check <- cbind(x, y, z)
check

R> x <- c(5,6,4,3,5,3,1)
R> y <- c(1,6,2,1,7,1,9)
R> folds <- function(x, y) (ifelse( ((x - y) >= 0), 2^(x - y), -(2^abs(x - y))))
R> z <- folds(x, y)
R> check <- cbind(x, y, z)
R> check
     x y    z
[1,] 5 1   16
[2,] 6 6    1
[3,] 4 2    4
[4,] 3 1    4
[5,] 5 7   -4
[6,] 3 1    4
[7,] 1 9 -256
x1 <- c(5,6,4,3,5,3,1)
y1 <- c(11,6,2,1,7,1,9)
folds <- function(x, y) {ifelse( ((x - y) >= 0), {2^(x - y)}, {-(2^abs(x - y))} ) }
z1<-folds(x1,y1)
check2<-cbind(x1,y1,z1)
check2
                         
R> x1 <- c(5,6,4,3,5,3,1)
R> y1 <- c(11,6,2,1,7,1,9)
R> folds <- function(x, y) {ifelse( ((x - y) >= 0), {2^(x - y)}, {-(2^abs(x - y))} ) }
R> z1<-folds(x1,y1)
R> check2<-cbind(x1,y1,z1)
R> check2
     x1 y1   z1
[1,]  5 11  -64
[2,]  6  6    1
[3,]  4  2    4
[4,]  3  1    4
[5,]  5  7   -4
[6,]  3  1    4
[7,]  1  9 -256
It does work in my ESS R session buffer, so
it depends on your setup.

try
R> ?"function"

?function

might not work as the R parser doesn't think you have 
finished typing in the expression (function objects
are typically terminated by the final '}' brace).
Best

Steve McKinney