如何复制外包并覆盖一个函数?

时间:2017-07-27 14:33:02

标签: r package overwrite cran

我喜欢构建一个CRAN一致的包,但是必须从外包中覆盖一个函数。可能我必须在不同的命名空间下复制整个包函数?有没有办法以CRAN的方式做到这一点?

本地以下作品,但当然不适用于有效的CRAN套件

HtmlHelper oHtmlHelper = new HtmlHelper(oViewContext, oViewDataContainer);
oHtmlHelper.RenderAction(sController, sAction);

我非常感谢一个例子。 (xyz的维护者无法改变它,因为我的关注是一个非常特殊的情况。)

THX 克里斯托夫

1 个答案:

答案 0 :(得分:1)

我的感觉是你在这里至少有两个可能的选择。这首先是我认为你需要的,但我包括两者的完整性。

  1. 创建自己的包并扩展基础包
  2. 创建扩展基本包功能的自己的功能
  3. nb :如果您可以提供您希望扩展的软件包和功能,那将非常有用,因为我必须使其略显通用。我已经引用了原始的StackOverflow帖子,这些帖子在这种情况下帮助了我。在进一步/深入阅读方面,我的建议是:

    • R Inferno作者:Patrick Burns
      • 涵盖R
      • 的细微差别
      • 阅读第7节 - 圆形7对象方向的跳闸
    • R Packages 作者:哈德利威克姆
      • 第8章命名空间
      • Hadley在解释R命名空间方面做得很好。

    解决方案选项:

    创建您自己的包并扩展基础包

    在这种情况下,我的感觉是指导您查看Writing R Extensions手册的1.5.6部分。

    为什么呢?好吧,根据你的描述,我的意思是从包中导入函数,然后编写你的扩展函数。

    您可以通过使用指令

    显式导入类和方法来完成此操作
    importClassesFrom(package, ...)
    importMethodsFrom(package, ...)
    

    分别用方法列出类和函数。假设我们有两个小包A和B,B使用A.然后他们可以有NAMESPACE文件

    export(f1, ng1)
    exportMethods("[")
    exportClasses(c1)
    

    importFrom(A, ng1)
    importClassesFrom(A, c1)
    importMethodsFrom(A, f1)
    export(f4, f5)
    exportMethods(f6, "[")
    exportClasses(c1, c2)
    

    分别

    请注意,importMethodsFrom还将导入这些方法在命名空间中定义的任何泛型。如果您导出相应的泛型可用的S4方法,这一点很重要。例如,您可能需要从图形中导入绘图以使可见的函数转换为其隐式泛型。但是更好的做法是使用stats4导出的泛型,因为这样可以使多个包明确地设置这些泛型的方法。

    这是以前帮助我的StackOverflow问题和答案:

    创建扩展基本包函数的自己的函数

    请参阅:Overwrite method to extend it, using the original implementation

    我希望以上有所帮助。