如何知道哪个包在R中具有当前功能?

如何知道哪个包在R中具有当前功能?,r,R,当我过滤时,Rstudio让我选择: Help on topic 'filter' was found in the following packages: Linear Filtering on a Time Series (in package stats in library C:/Program Files/R/R-3.5.3/library) Return rows with matching conditions (in package dplyr in library C:/Us

当我过滤时,Rstudio让我选择:

Help on topic 'filter' was found in the following packages:

Linear Filtering on a Time Series
(in package stats in library C:/Program Files/R/R-3.5.3/library)
Return rows with matching conditions
(in package dplyr in library C:/Users/me/Documents/.checkpoint/2019-12-11/lib/x86_64-w64-mingw32/3.5.3)

当我在脚本中使用
filter()
时,如何知道它是
stats::filter()
还是
dplyr::filter()

您可以执行以下操作来查找当前加载函数的包名

environmentName(environment(filter))
至于处理它,我会坚持使用
stats::filter()
dplyr::filter()
,如果它只是少量使用,或者将其声明为新函数

filter_stats <- stats::filter
filter_stats()

filter\u stats通用解决方案是检查
topenv(环境(函数名称))
(并可能对结果调用
environmentName
)。但只需打印
函数名
(即使用名称而不调用名称)也可以

这就是说,这通常不应该在运行时用作机制;相反,请确保加载了预期的包。最简单的方法是:

  • 使用显式命名空间限定,即
    dplyr::filter
    而不是
    filter
    ;这是大多数现代语言中的最佳实践,但它可能会非常繁重,尤其是在进行探索性分析时
  • 导入包时。与
    require
    不同,
    将在无法加载相应的包时引发错误

  • 只需键入
    filter
    而不使用
    ()
    并查看
    ,然后,如果我想使用
    base::function
    ,我应该在function name之前添加
    base::
    ?@kittygirl问得好。一般来说,人们不会这样做。首先,这是不现实的,因为生成的R代码非常不可读。其次,当人们重写“base”中的名称时(他们一开始很少这样做!),他们通常倾向于这样做,即该函数可以作为“base”函数的替代品,否则通常被视为糟糕的风格。最终,我不知道有谁明确使用
    base::
    ,除非是在特定情况下。