#' Multi-Value assign operator. #' #' @param lhs vector of variables (or variable names) to assign values. #' @param rhs object that can be coersed to list of the same length as #' \code{lhs} storing the values of the variables defined in \code{lhs}. #' #' @details The parameter names \code{lhs} and \code{rhs} stand for "Left Hand #' Side" and "Right Hand Side", respectively. #' #' @examples \dontrun{ #' c(a, b) %<-% list(1, 2) #' # is equivalent to #' ## a <- 1 #' ## b <- 2 #' #' # Switching the values of a, b could be done by. #' c(a, b) %<-% list(b, a) #' # note the usage of 'list' on the right side, otherwise an exraction of the #' # first two values of the concatenated object is performed. See next: #' #' # Extract values. #' c(d1, d2, d3) %<-% 1:10 #' # extracting the first three valus from the vector of length 10. #' } #' #' @export "%<-%" <- function(lhs, rhs) { var.names <- make.names(as.list(substitute(lhs))[-1]) values <- as.list(rhs) env <- parent.frame() for (i in seq_along(var.names)) { assign(var.names[i], values[[i]], envir = env) } invisible(lhs) }