[R] custom function insite dlys::mutate

Rasmus Liland jen@r|| @end|ng |rom @tudent@|ko@@u|o@no
Mon Mar 30 21:47:42 CEST 2020


On 2020-03-30 13:21 +0000, SIMON Nicolas wrote:
| Apparently the condition " if ( var1 > tt ) " 
| cannot be evaluated correcty.
| 
| Could you please give me an advice to write it 
| properly?

Hi!  To understand what you wanted to do, I tried 
to recreate your example in classic R indexing of 
a data.frame, then converting it to a tibble:

    var1 <- seq(0, 20, 1)
    var2 <- c(0, 2, 4, 8)
    var3 <- 44.44
    var4 <- 0.5
    
    dat <- cbind(var1, var2)
    dat <- as.data.frame(dat)
    idx <- dat$var1 > dat$var2
    dat[idx, "obs1"] <-
      var3 * exp(-var4 * dat[idx, "var1"])
    dat[!idx, "obs1"] <- 0
    dat <- tibble::as_tibble(dat)
    dat

Apparently there is a dplyr::if_else function you 
can use with dplyr::mutate like you wanted to end 
up in the same place:

    var1 <- seq(0, 20, 1)
    var2 <- c(0, 2, 4, 8)
    var3 <- 44.44
    var4 <- 0.5
    
    dat <- cbind(var1, var2)
    dat <- as.data.frame(dat)
    dat <- tibble::as_tibble(dat)
    dat <-
      dplyr::mutate(.data=dat,
        obs=dplyr::if_else(
          var1>var2,
          var3*exp(-var4 * var1),
          0)
      )
    dat

Might this be close to what you were looking to 
do?

/Rasmus



More information about the R-help mailing list