【发布时间】:2018-01-03 08:43:53
【问题描述】:
我喜欢构建一个符合 CRAN 的包,但必须覆盖来自外部包的函数。可能我必须在不同的命名空间下复制整个包函数?有没有办法以 CRAN 的方式做到这一点?
本地以下工作,但当然不适用于有效的 CRAN 包
library(xyz)
f1 <- xyz:::f
body(f1) <- parse(text = gsub("df < 0", "any(df < 0)", deparse(body(f1))))
assignInNamespace("f", f1, ns="xyz")
我非常感谢一个例子。 (xyz的维护者不可能改变它,因为我关心的是一个非常特殊的情况。)
谢谢 克里斯托夫
【问题讨论】:
-
为什么要覆盖
foreign中的内容?这样做通常不是一个好主意,因为它在编写代码时会造成混乱。 R 处理范围的方式意味着最后加载的包会定义函数,因此很难知道正在调用哪个包的函数。 -
是的,它很脏,但不幸的是,在这种情况下,我看不到其他可能性。是否不可能使其符合 CRAN 标准?
-
请提供有关您实际尝试执行的操作的更多详细信息。您必须这样做并没有任何明显的理由。
-
函数是否需要在 xyz 的命名空间中?它是否使用了许多未导出的函数?通常,您只需在自己的命名空间中重新定义函数(同时遵循许可证)。