如何保存要在另一个会话中使用的“quosure”?
How to save a `quosure` to be used in another session?
保存 quosure 以便它可以 运行 在另一个会话中的最佳方法是什么?
考虑下面的内容,它使用 {rlang}
的 quosure 概念来引用表达式 x+2
并捕获其全局环境并将其计算为 4
.
但是,如果您保存 quosure 然后开始新的会话,那么 eval_tidy
将不再有效,因为 x
在新环境中可能未定义。
我的用例是保存这些表达式并 运行将它们放在单独的会话中。保存 quosure 以便它可以在另一个会话中 运行 的最佳方法是什么?也是拯救环境的唯一方法吗?这并不理想,因为环境中可能包含非常大的物体,因此最好有重量更轻的解决方案。
library(rlang)
x = 2
quo_x_plus_2 = quo(x + 2)
saveRDS(quo_x_plus_2, "plsdel.rds")
# quits R
q()
a = readRDS("plsdel.rds")
rlang::eval_tidy(a)
如果您在一个函数中创建 quosure(以及它所引用的变量),这看起来是可行的:
create_quo <- function() {
x = 2
quoted = quo(x + 2)
quoted
}
quo_x_plus_2 <- create_quo()
# Has an environment attached rather than just
# referring to the global env
quo_get_env(quo_x_plus_2)
# Save, quit and reload as in the original question
saveRDS(quo_x_plus_2, "plsdel.rds")
# quits R
q()
a = readRDS("plsdel.rds")
rlang::eval_tidy(a)
保存 quosure 以便它可以 运行 在另一个会话中的最佳方法是什么?
考虑下面的内容,它使用 {rlang}
的 quosure 概念来引用表达式 x+2
并捕获其全局环境并将其计算为 4
.
但是,如果您保存 quosure 然后开始新的会话,那么 eval_tidy
将不再有效,因为 x
在新环境中可能未定义。
我的用例是保存这些表达式并 运行将它们放在单独的会话中。保存 quosure 以便它可以在另一个会话中 运行 的最佳方法是什么?也是拯救环境的唯一方法吗?这并不理想,因为环境中可能包含非常大的物体,因此最好有重量更轻的解决方案。
library(rlang)
x = 2
quo_x_plus_2 = quo(x + 2)
saveRDS(quo_x_plus_2, "plsdel.rds")
# quits R
q()
a = readRDS("plsdel.rds")
rlang::eval_tidy(a)
如果您在一个函数中创建 quosure(以及它所引用的变量),这看起来是可行的:
create_quo <- function() {
x = 2
quoted = quo(x + 2)
quoted
}
quo_x_plus_2 <- create_quo()
# Has an environment attached rather than just
# referring to the global env
quo_get_env(quo_x_plus_2)
# Save, quit and reload as in the original question
saveRDS(quo_x_plus_2, "plsdel.rds")
# quits R
q()
a = readRDS("plsdel.rds")
rlang::eval_tidy(a)