36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			R
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			R
		
	
	
	
	
	
#' 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)
 | 
						|
}
 |