保存quosure以便在另一个会话上运行的最佳方法是什么?
考虑以下内容,它使用{rlang}的quosure概念引用表达式x+2,并捕获其全局环境,并将其求值为4。
但是,如果您保存该查询,然后启动一个新会话,则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)发布于 2019-12-16 08:36:54
如果你在一个函数中创建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)https://stackoverflow.com/questions/59349164
复制相似问题