【发布时间】:2013-03-10 01:14:57
【问题描述】:
我在 gWidgets - R 中有一个处理程序,其中加载了数据:
handler=function(h,...){
fname <- gfile(text="Choose a file",
type="open",
action="print",
handler =
function(h,...){
do.call(h$action, list(h$file))
}
)
load(fname)
.GlobalEnv$SETTINGS <- setwrite
svalue(status_bar) <- "Settings Loaded"
})
您可以看到,为了在函数结束后加载的内容仍然可用,最后我放入 GlobalEnv,否则当处理程序函数结束时,创建的“setwrite”对象在处理程序结束时被销毁功能完成。然而,这并不是我真正想要的结果,因为用户不需要该对象,但我的包中的其他功能(未导出)确实需要使用该对象。我想我需要做的是将“setwrite”变量放在这些函数范围内的某个位置,比如package:pkgnamehere$SETTINGS <- setwrite 应该放在.GlobalEnv$SETTINGS <- setwrite 行所在的位置,但它告诉我找不到对象包。我怎样才能正确地做到这一点,以便处理程序制作的对象并放入包非导出函数/其他 gWidgets 事件处理程序的范围内。 (非导出,因为这个想法是用户应该能够使用 GUI)。谢谢。
【问题讨论】:
-
一个很好的方法是使用参考类(在某种意义上这是超级充电的环境)。然后您可以调用实例上的方法来保存值。至于您的错误,我认为最好命名环境(在您的评论中为 6)。
标签: r namespaces scope gwidgets