## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = ">" ) library(invctr) ## ----------------------------------------------------------------------------- d <- data.frame(x=1:5, y=6, txt=paste0("delta = ",6-1:5), row.names=paste0("ri",5:1), stringsAsFactors = FALSE) knitr::kable(d) # Change a column name based on the current name # colnames(d)[colnames(d)%in%"y"] <- "Yhat" colnames(d)["y"%ci%d] <- "Yhat" 1:3%ci%d # Use a range of values in variable to change cells # d$txt[d$x>=2&d$x<=4] <- "Changed!" d$txt[d$x%[]%c(2,4)] <- "Changed!" knitr::kable(d) # Use row names to change cells # d$txt[rownames(d)%in%c("ri2,ri4")] <- "Changed again!" d$txt[c("ri2","ri4")%ri%d] <- "Changed again!" knitr::kable(d) ## ----------------------------------------------------------------------------- # Replace special numerical values c(0,Inf,1,NA,2,NaN,3) %00% NA # Also works with NULL NULL %00% NA # Length 0 vectors logical(0) %00% NA numeric(0) %00% "lenghth 0!!" 0 %00% "lenghth 0!!" ## ----------------------------------------------------------------------------- # Signed increment # Notice the difference between passing an object and a value for counter # Value (11 %+-% -5) (11 %+-% 5) # Object i <- 11 (i %+-% -5) (i %+-% 5) # This means we can use the infix in a while ... statement # WARNING: As is the case for any while ... statement, be careful not to create an infinite loop! i <- 5 while(i > -5){ i %+-% -1 print(i) } ## ----------------------------------------------------------------------------- # Non-negative increment # Notice the difference between passing an object and a value for counter # Value (0 %++% 5) (0 %++% 5) # Object i <- 0 (i %++% 5) (i %++% 5) # This means we can use the infix in a while ... statement # WARNING: As is the case for any while ... statement, be careful not to create an infinite loop! i <- 0 while(i < 20){ i %++% 5 print(i) } ## ----------------------------------------------------------------------------- set.seed(1234) (x <- round(runif(10,1,10))) # Pad front with 10 zeros x%[+%5 # Same as x%[+% c(5,0) # Pad rear with zeros x%+]%5 # Same as x%+]%c(5,0) # Pad front + rear with NA x%[+]%c(4,NA) # Pad front + rear of a character vector "yes"%[+]%c(2,"no") "yes"%[+]%c(1,"no") "yes"%[+]%c(0,"no") ## ----------------------------------------------------------------------------- set.seed(4321) (x <- round(runif(10,1,10))) # Trim front x%[-%5 # Trim rear x%-]%5 # Trim front + rear x%[-]%c(2,4) x%[-]%3