【问题标题】:Assign values to objects in a specific namespace - R为特定命名空间中的对象赋值 - R
【发布时间】: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 &lt;- setwrite 应该放在.GlobalEnv$SETTINGS &lt;- setwrite 行所在的位置,但它告诉我找不到对象包。我怎样才能正确地做到这一点,以便处理程序制作的对象并放入包非导出函数/其他 gWidgets 事件处理程序的范围内。 (非导出,因为这个想法是用户应该能够使用 GUI)。谢谢。

【问题讨论】:

  • 一个很好的方法是使用参考类(在某种意义上这是超级充电的环境)。然后您可以调用实例上的方法来保存值。至于您的错误,我认为最好命名环境(在您的评论中为 6)。

标签: r namespaces scope gwidgets


【解决方案1】:

您还可以在包的环境中存储选项。

pkgnamehere:::.options

参见示例:

library(foreach)
foreach:::.foreachGlobals
<environment: 0x000000001448fae8>

【讨论】:

  • 这是我想做的事情——让 GUI 作为用户看到并与之交互的东西,但是包命名空间或环境中的所有变量、函数等,所以基本上不碍事,不能被太多弄乱。何我将thins合并到我的包中,即我的包有.options或任何环境 - 因为我的理解是一旦一个包加载了 library() 它就不能再被弄乱了 - 因为我尝试将assign("dnaseqs", dnaseqs, envir=6)放在我的上面的处理程序,但 R 不会有任何 invalid 'envir' argument.
猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 2021-12-20
  • 2020-01-04
  • 1970-01-01
  • 2015-10-04
  • 2013-01-27
  • 2019-03-14
  • 1970-01-01
相关资源
最近更新 更多