首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定在加载多个包时哪个版本的函数是活动的。

确定在加载多个包时哪个版本的函数是活动的。
EN

Stack Overflow用户
提问于 2021-06-17 20:42:40
回答 1查看 50关注 0票数 1

如果我加载了多个包来定义同名函数,那么是否有一种简单的方法来确定该函数的哪个版本当前是活动的?比方说,我有基R,tidyverse,还有一堆时间序列包。我想要一个函数which_package("intersect"),它可以告诉我intersect的活动版本的包名。我知道你可以回去看看你在安装软件包时收到的所有警告信息,但我认为那种手动搜索不仅繁琐而且容易出错。

有一个函数here可以做我想做的事情,除了它为所有冲突生成一个表,而不是一个函数的值。我会对此感到非常高兴,也会接受类似的函数作为答案,但我对函数的实现有问题。在我的示例中,它插入了大量的空白和许多包名的副本(例如,%>%函数显示了132个包),这使得输出很难阅读,也很难使用。这似乎应该是很容易消除空白和重复,我已经花了相当多的时间,在各种方法,我希望工作,但这没有影响到结果。

因此,作为许多冲突的一个例子:

代码语言:javascript
复制
install.packages(pkg = c("tidyverse", "fpp3", "tsbox", "rugarch", "Quandl", "DREGAR", "dynlm", "zoo", "GGally", "dyn", "ARDL", "bigtime", "BigVAR", "dLagM", "VARshrink")

lapply(x = c("tidyverse", "fable", "tsbox", "rugarch", "Quandl", "DREGAR", "dynlm", "zoo", "GGally", "dyn", "ARDL", "bigtime", "BigVAR", "dLagM", "VARshrink"), 
library, character.only = TRUE)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-17 20:52:44

您可以使用自己的函数助手来提取此信息。

代码语言:javascript
复制
which_package <- function(fun) {
  if(is.character(fun)) fun <- getFunction(fun)
  stopifnot(is.function(fun))
  x <- environmentName(environment(fun))
  if (!is.null(x)) return(x)
}

这将为您在全局环境中定义的函数返回R_GlobalEnv。如果您确实希望将packageName函数仅限于包,则还有它。例如

代码语言:javascript
复制
library(MASS)
library(dplyr)
which_package(select)
# [1] "dplyr"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68026321

复制
相关文章

相似问题

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