在.R脚本中嵌入fix()函数?

时间:2010-10-27 22:36:08

标签: r

我正在寻找一种在脚本中嵌入fix()函数的方法。基本上,这就是我目前正在做的事情:

  1. 我加载了某个包。例如,library(PerformanceAnalytics)
  2. 我调用fix()函数来编辑加载包中的几个函数。例如,fix(VaR)
  3. 然后,使用R的内置编辑器,我将我的功能复制粘贴到最初从包中加载的那个。
  4. 最后,我在我的.R脚本中找到了源代码,该脚本调用了我修复的上述函数并执行了我需要的计算。
  5. 基本上,我想简化上面的第3步。而不是必须手动键入fix(function)并复制粘贴到已加载包中的原始函数,我宁愿在我发布的脚本中完成它。

    无论如何要做到这一点?

    仅供参考,我已经联系了软件包的创建者并使用修改后的代码加载了软件包的重新编译版本是不可能的。

3 个答案:

答案 0 :(得分:3)

可能source您的功能,然后使用assignInNamespace


编辑#1:
上述操作无效,因为assignInNamespace不会更改已导出的对象。相反,

  1. 将您的函数放入文件(foo.R)
  2. 加载包
  3. 然后source(foo.R)sys.source(foo.R, envir=attach(NULL, name="myenv"))
  4. 如果你在包之后加载,你的功能会在搜索列表中更高,所以R会在获得具有相同名称的包的功能之前找到它们。


    编辑#2:
    我没有意识到VaR在命名空间中调用了未导出的函数。这就是EDIT#1不起作用的原因。要使其发挥作用,您需要明确引用VaR中使用的所有未导出的PerformanceAnalytics函数(例如,将VaR.Gaussian更改为PerformanceAnalytics:::VaR.Gaussian)。

    有关其他方法,请参阅R-devel上的this post。我无法迅速得到Ripley教授的解决方案(我得到的错误与编辑#1相同)并且我没有尝试Gabor的解决方案。

答案 1 :(得分:2)

你可以直接编辑身体,在这里讨论:

What ways are there to edit a function in R?

答案 2 :(得分:0)

您可以从CRAN下载软件包源代码。编辑该函数(它将在PackageName / R中找到),然后将此软件包安装到R中,并以这种方式使用它。

您甚至可以更改DESCRIPTION文件中的包名称...将其命名为“PerformanceAnalytics2”,然后在R中只需library(PerformanceAnalytics2)并使用它,就像使用原始包一样。