Both qenv
objects 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 <- c(x, y)
# Error message will occur
In this example, mtcars1
object exists in both x
and y
objects but the content are not identical.
mtcars1
in the x qenv
object has more columns than mtcars1
in the y qenv
object (only has one column).
join()
will look for identical code elements in both qenv
objects.
The index position of these code elements 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 <- c(x, y)
join_q <- c(q, z)
# Error message will occur# Check the order of evaluation based on the id slot
The error occurs because the index position of common code elements in 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$i # Output: 2
y$i # Output: 3
c()
fails to provide a proper result because of the temporary variable i
exists
in both objects but has different value.
To fix this, we can set i <- NULL
in 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 <- c(x,y)