首页 > 解决方案 > utils:::fixInNamespace 是否会进行永久性更改?R

问题描述

我正在为脚本使用 3rd 方包,我想调整其中一个函数,以便将该函数创建的变量之一分配给全局环境。

我以前是这样做的

fixInNamespace("the_function","the_namespace","namespace:::the_function")

它打开了一个弹出窗口,我可以在其中添加我的一行代码

assign("global_variable", "variable", envir = .GlobalEnv)

它就像一个魅力,然后我可以编写脚本的其余部分来使用这个新形成的变量。一天后我尝试再次运行代码,但找不到全局变量,如果我运行

namespace:::the_function

它显示了没有我编辑的功能代码,为什么它恢复到以前的形式?fixInNamespace 不是永久性的吗?

谢谢,瑞安

标签: rglobal-variables

解决方案


不,这不是永久性的。它将持续到再次加载命名空间。通常,命名空间会在整个 R 会话中保持加载,因此您的更改将持续到会话。(可以在不退出 R 的情况下卸载命名空间;在这种情况下,一旦卸载命名空间,您的更改就会丢失。)无论如何,下次加载包时,它将是命名空间的原始版本.

有几种方法可以使您的更改永久化,但这样做不是一个好主意。一种方法是assignInNamespace从您的启动代码中调用(参见?Startup可能性)。另一种方法是编辑 R 源代码,并构建您自己的 R 自定义副本。

从长远来看,这些都不是一个好主意。R 的某些未来版本可能会更改您已修改的功能,然后您最终会得到一个修改过的过时版本。


推荐阅读