-1

I came across the following post: Vectorized IF statement in R?, which deals with a vecotrisation of one if-else construct in R. However, I do not want to build nested $ifelse$ functions in R, is there another way to do this?

As an example I have this:

library(data.table)
precalc_nrcolumns <- function(TERM_DATE, CHANGE_DATE){
  if(CHANGE_DATE < TERM_DATE){
    if(CHANGE_DATE == 0) {
      if(TERM_DATE > 100) {
        nrcolumns <- 100
      }else{
        nrcolumns <-  TERM_DATE
      }
    }else{
      nrcolumns <- CHANGE_DATE
    }
  }else{
    nrcolumns <- 100
  }
  return(nrcolumns)
}


test.data <- data.table(TERM_DATE = sample(1:500, 100, replace=TRUE),
           CHANGE_DATE = sample(1:500, 100, replace=TRUE))

test.data[, value := mapply(precalc_nrcolumns, TERM_DATE, CHANGE_DATE)]

I am fully aware of using mapply, which actually works, but I was wondering what other ways there are to deal with this.

Snowflake
  • 2,869
  • 3
  • 22
  • 44

1 Answers1

2

A possible approach:

test.data[, val := pmin(CHANGE_DATE, TERM_DATE)][
    CHANGE_DATE==0L, val := pmin(100L, TERM_DATE)][
        CHANGE_DATE >= TERM_DATE, val := 100L]

data:

set.seed(0L)
library(data.table)
nr <- 300
test.data <- data.table(TERM_DATE = sample(0:150, nr, replace=TRUE),
    CHANGE_DATE = sample(0:150, nr, replace=TRUE))
chinsoon12
  • 25,005
  • 4
  • 25
  • 35