Other solutions are more appropriate. This is just plain fun:
(x > 1) * (x - 1) + 1
A simple replacement (@Matthew Lundberg) is the most efficient solution:
library(microbenchmark) microbenchmark(pmax(1, x), "[<-"(x, x < 1, 1), (x > 1) * (x - 1) + 1) # Unit: microseconds # expr min lq median uq max neval # pmax(1, x) 15.494 16.2545 16.5165 16.9365 52.165 100 # `[<-`(x, x < 1, 1) 1.466 1.6920 2.3325 2.7485 23.683 100 # (x > 1) * (x - 1) + 1 2.084 2.2870 2.7880 3.2080 8.958 100
Sven hohenstein
source share