r - 如何在我的环境中识别 activeBindings 而无需执行它们?
问题描述
这是一个示例 activeBinding:
invisible(makeActiveBinding('newdev', function(...) {library(grDevices); dev.new(width = 5,height=5,restoreConsole=T)},.GlobalEnv))
我要解决的问题是,当我将它用作参数时,各种函数会导致该项目执行。例子包括
class(newdev)
typeof(newdev)
这些都返回“NULL”,但在newdev
执行过程中,创建了一个不需要的新图形窗口。(这是一个小烦恼;我想使用的其他绑定在错误的时间调用时会执行更灾难性的操作)相比之下, ls()
返回所有内容的名称,包括"newdev"
不执行它的元素。
为了执行各种其他任务,我希望能够执行“ls(everything_not_a_activeBinding)”之类的操作来获取我的所有对象,除了用于某些操作的 activeBindings(save.image()
例如,也许)。
背景:据我所知,使用 activeBinding 是发出函数调用的唯一方法,而无需()
在函数名称后键入。如果我错过了一些不涉及绑定的明显方法,请告诉我。
解决方案
使用bindingIsActive
:
makeActiveBinding("quux", local({i <- 0; function(...) { message("Hello! ", i); i <<- i + 1L; } }), env = .GlobalEnv)
quux
# Hello! 0
quux
# Hello! 1
class(quux)
# Hello! 2
# [1] "numeric"
sapply(ls(), bindingIsActive, .GlobalEnv)
# quux some_magic_function
# TRUE FALSE
Filter(function(x) !bindingIsActive(x, env = .GlobalEnv), ls())
# [1] "some_magic_function"
推荐阅读
- apache-kafka - 卡夫卡提交差距
- ios - 如何在框架中使用 @objc 扩展?
- cmd - 使用 cmd 从子文件夹中删除特定文件
- java - 没有在android studio上打开谷歌地图就无法获取位置
- python-3.x - 在 pycharm 中为每次运行显示来自 mlflow 的度量值
- python - 如何使用 xlrd 将 excel 转换为嵌套的 JSON?
- javascript - JSON Parse 错误:带有 localStorage 的意外标识符“未定义”
- npm - 如何在我的 package.json 中添加自定义脚本
- api - 使用 Passport Local 登录向 POST 请求返回 400 错误(使用 Axios、MERN 和 React Hooks)
- r - 如何获得完整的 R 控制台输出?