r - 如何保存“quosure”以在另一个会话中使用?
问题描述
保存 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)
推荐阅读
- javascript - 在其他组件中绑定表单验证
- kubernetes - KubeletNotReady - 初始化 CSINodeInfo 失败
- mongodb - 将 cdc 限制为特定集合的 Debezium mongodb 连接器属性
- regex - 如何选择可能使用 awk/sed 多次出现的两个标记模式之间的行并删除这些行
- python - 将列表转换为 time.struct_time
- c++ - 你能帮我理解重载一元运算符和二元运算符之间的区别吗?
- python - 从字典中选择一个随机条目
- php - 在 Codeigniter 框架中插入(不执行)之前打印查询
- java - 是否可以在使用 Servlet 过滤器上传文件时更改文件?
- android - 需要采取的行动 在 2020 年 3 月 1 日之前切换到 Play Referrer API