utils ::: fixInNamespace是否可以进行永久更改? R

时间:2018-12-13 10:58:24

标签: r global-variables

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

我以前是这样做的

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

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

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

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

namespace:::the_function

它向我显示了未经编辑的功能代码,为什么将其恢复为以前的形式? fixInNamespace不是永久性的吗?

谢谢, 瑞安

1 个答案:

答案 0 :(得分:0)

不,它不是永久的。它将持续到再次加载命名空间为止。通常,名称空间会为整个R会话保持加载状态,因此您的更改将持续到该会话。 (可以在不退出R的情况下卸载名称空间;在这种情况下,一旦名称空间被卸载,您的更改就会丢失。)在任何情况下,下次加载程序包时,它将是名称空间的原始版本。

有两种方法可以使您的更改永久生效,但这并不是一个好主意。一种方法是从启动代码中调用<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div> This is div 1 </div>(有关可能性,请参见assignInNamespace)。另一种方法是编辑R源代码,并构建自己的R自定义副本。

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