首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保存`quosure`,以便在其他会话中使用?

如何保存`quosure`,以便在其他会话中使用?
EN

Stack Overflow用户
提问于 2019-12-16 08:03:54
回答 1查看 34关注 0票数 0

保存quosure以便在另一个会话上运行的最佳方法是什么?

考虑以下内容,它使用{rlang}的quosure概念引用表达式x+2,并捕获其全局环境,并将其求值为4

但是,如果您保存该查询,然后启动一个新会话,则eval_tidy将不再起作用,因为在新环境中可能未定义x

我的用例是保存这些表达式并在单独的会话中运行它们。保存quosure以便在另一个会话上运行的最佳方法是什么?也是拯救环境的唯一方法吗?这并不理想,因为环境中可能包含非常大的对象,所以最好有一个轻量级的解决方案。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-16 08:36:54

如果你在一个函数中创建quosure (以及它引用的变量),这看起来是可行的:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59349164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档