首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R包中删除/注销特定函数

从R包中删除/注销特定函数
EN

Stack Overflow用户
提问于 2019-11-23 04:42:33
回答 2查看 729关注 0票数 3

我这里可能没有正确地使用术语,所以请原谅我.

我有一种情况,即一个包“覆盖”一个由另一个包加载的具有相同名称的函数,从而改变函数的行为(中断)。

具体情况:

代码语言:javascript
复制
X <- data.frame ( y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100) )

library(CausalImpact)
a <- CausalImpact::CausalImpact( X, c(1,75), c(76, 100) ) # works

library(bfast) # imports quantmod which loads crappy version of as.zoo.data.frame

b <- CausalImpact::CausalImpact( X, c(1,75), c(76, 100) ) # Error

我知道错误来自于函数as.zoo.data.frame的两个版本。问题版本由bfast从包'quantmod‘导入(参见https://github.com/joshuaulrich/quantmod/issues/168)。不幸的是,他们的修补程序并没有阻止这个错误。超级烦人。

我可以破解这个特定的问题,但我想知道是否有一种一般的方式来喜欢这个函数的变体从搜索路径。detachunloadNamespace都不删除违规函数(之后的行为相同)。我们讨论了这里这里的解释和类似的问题,但是我无法找到一个通用的解决方案。例如,我宁愿删除这个函数,也不愿克隆和重写CausalImpact来处理这种行为。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-25 03:44:20

下面是一个可行的答案,但它不如取消注册S3方法更好,因为它涉及用所需的方法替换S3方法表中的注册版本:

代码语言:javascript
复制
library(CausalImpact)
library(bfast) 
assignInNamespace("as.zoo.data.frame", zoo:::as.zoo.data.frame, ns = asNamespace("zoo"))

部分基于@smingerson在评论中的建议

票数 0
EN

Stack Overflow用户

发布于 2019-11-23 04:47:17

从R3.6.0开始,有一个名为"conflicts.policy“的新选项可以在已建立的框架内处理这个问题。对于这样的小问题,您可以使用library()的新参数。如果尚未达到3.6,最简单的解决方案可能是在需要时显式命名空间CausalImpact,即CausalImpact::CausalImpact。这是一个大嘴巴,所以您可以执行causal_impact <- CausalImpact::CausalImpact并使用这个别名。

代码语言:javascript
复制
# only attach select
library(dplyr, include.only = "select")
# exclude slice/arrange from being attached.
library(dplyr, exclude = c("slice", "arrange")) 

library(bfast, exclude = "CausalImpact")应该能解决你的问题。

附加意味着他们是可用的使用,没有明确的前缀与他们的包。在任何一种情况下,类似于dplyr::slice的东西都能正常工作。

有关更多信息,您可以看到?library。此外,R-核心成员卢克·蒂尔尼( Luke )写了一个博客,解释conflicts.policy的工作原理。你可以找到这里

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59004588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档