| join {teal.code} | R Documentation |
Join qenv objects
Description
Checks and merges two qenv objects into one qenv object.
Usage
join(x, y)
Arguments
x |
( |
y |
( |
Details
Any common code at the start of the qenvs is only placed once at the start of the joined qenv.
This allows consistent behavior when joining qenvs which share a common ancestor.
See below for an example.
There are some situations where join() cannot be properly performed, such as these three scenarios:
Both
qenvobjects contain an object of the same name but are not identical.Example:
x <- eval_code(qenv(), expression(mtcars1 <- mtcars)) y <- eval_code(qenv(), expression(mtcars1 <- mtcars['wt'])) z <- join(x, y) # Error message will occur
In this example,
mtcars1object exists in bothxandyobjects but the content are not identical.mtcars1in thex qenvobject has more columns thanmtcars1in they qenvobject (only has one column).-
join()will look for identical@idvalues in bothqenvobjects. The index position of these@ids must be the same to determine the evaluation order. Otherwise,join()will throw an error message.Example:
common_q <- eval_code(qenv(), expression(v <- 1)) x <- eval_code( common_q, "x <- v" ) y <- eval_code( common_q, "y <- v" ) z <- eval_code( y, "z <- v" ) q <- join(x, y) join_q <- join(q, z) # Error message will occur # Check the order of evaluation based on the id slot shared_ids <- intersect(q@id, z@id) match(shared_ids, q@id) # Output: 1 3 match(shared_ids, z@id) # Output: 1 2
The error occurs because the index position of identical
@idbetween the two objects is not the same. The usage of temporary variable in the code expression could cause
join()to fail.Example:
common_q <- qenv() x <- eval_code( common_q, "x <- numeric(0) for (i in 1:2) { x <- c(x, i) }" ) y <- eval_code( common_q, "y <- numeric(0) for (i in 1:3) { y <- c(y, i) }" ) q <- join(x,y) # Error message will occur # Check the value of temporary variable i in both objects x@env$i # Output: 2 y@env$i # Output: 3join()fails to provide a proper result because of the temporary variableiexists in both objects but has different value. To fix this, we can seti <- NULLin the code expression for both objects.common_q <- qenv() x <- eval_code( common_q, "x <- numeric(0) for (i in 1:2) { x <- c(x, i) } # dummy i variable to fix it i <- NULL" ) y <- eval_code( common_q, "y <- numeric(0) for (i in 1:3) { y <- c(y, i) } # dummy i variable to fix it i <- NULL" ) q <- join(x,y)
Value
qenv object.
Examples
q <- qenv()
q1 <- eval_code(q, expression(iris1 <- iris, mtcars1 <- mtcars))
q2 <- q1
q1 <- eval_code(q1, "iris2 <- iris")
q2 <- eval_code(q2, "mtcars2 <- mtcars")
qq <- join(q1, q2)
get_code(qq)
common_q <- eval_code(q, quote(x <- 1))
y_q <- eval_code(common_q, quote(y <- x * 2))
z_q <- eval_code(common_q, quote(z <- x * 3))
join_q <- join(y_q, z_q)
# get_code only has "x <- 1" occurring once
get_code(join_q)