如何在不执行它们的情况下识别我的环境中的 activeBindings?
How to identify activeBindings in my environment without executing them?
这里有一个例子 activeBinding:
invisible(makeActiveBinding('newdev', function(...) {library(grDevices); dev.new(width = 5,height=5,restoreConsole=T)},.GlobalEnv))
我要解决的问题是,当我将它作为参数时,各种函数都会导致它执行。示例包括
class(newdev)
typeof(newdev)
这两个 return "NULL",但是在 newdev
执行的过程中,创建了不需要的新图形 window。 (这是一个小烦恼;我想使用的其他绑定在错误的时间调用时会执行更多灾难性的操作)
相比之下,ls()
returns 包含所有内容的名称,包括元素 "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"
这里有一个例子 activeBinding:
invisible(makeActiveBinding('newdev', function(...) {library(grDevices); dev.new(width = 5,height=5,restoreConsole=T)},.GlobalEnv))
我要解决的问题是,当我将它作为参数时,各种函数都会导致它执行。示例包括
class(newdev)
typeof(newdev)
这两个 return "NULL",但是在 newdev
执行的过程中,创建了不需要的新图形 window。 (这是一个小烦恼;我想使用的其他绑定在错误的时间调用时会执行更多灾难性的操作)
相比之下,ls()
returns 包含所有内容的名称,包括元素 "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"