代码之家  ›  专栏  ›  技术社区  ›  Max Power

从R中的[package]导入[function]

  •  14
  • Max Power  · 技术社区  · 7 年前

    在Python或R中处理数据时,我们经常加载几个包。在某些情况下,两个包(例如。 foo bar )可能每个都包含一些功能(例如。 do_stuff

    from foo import do_stuff
    from bar import other_function    # (does not load/import do_stuff() from bar)
    

    在R中,我看到的所有代码都只导入整个包 倍数 library(package_name) Reordering factor gives different results, depending on which packages are loaded 事实上,即使“因为reorder.factor在base中不存在,所以没有掩蔽”,也会发生这种情况

    我希望这个问题的一般答案类似于 from package import function reorder

    5 回复  |  直到 7 年前
        1
  •  14
  •   wjchulme    6 年前

    虽然 this magrittr %>% %$% 这个 import 套餐服务:

    import::from(magrittr, "%$%")
    

    但显然可以用于任何功能:

    import::from(foo, "do_stuff", "do_other_stuff")
    

    ]不适用于 library .它被命名为拨打以下电话 import::from(pkg, fun1, fun2) https://CRAN.R-project.org/package=import

        2
  •  13
  •   Andrew Brēza    6 年前

    您可以使用 package::function() library .

    library(dplyr) # Has a function called filter()
    library(plyr) # Also has a filter() function
    
    dplyr::filter(foo)
    plyr::filter(bar)
    

    conflicted 包,强制您为所有不明确的函数调用显式标识包: https://www.tidyverse.org/articles/2018/06/conflicted/

        3
  •  8
  •   Joris Meys    7 年前

    你在比较两种功能不同的语言。首先,您可以使用 ::

    fortunes::fortune()
    

    调用 fortune 来自的函数 fortunes

    但你也必须小心这样做。因为根据包的构造方式,最终可能会使用依赖于命名空间中其他(未导出)函数的函数,但由于命名空间未加载,因此无法找到该函数。我自己也遇到过这个问题,使用的是例如 mgcv library() 正如安德鲁·布雷扎在他的回答中所说明的那样。至少使用 ::

    但是你链接到的问题,不会通过这个解决。这里的问题是“糟糕的设计”,因为包作者决定需要一个S3方法来重新排序因子,而不是特定于包的类。这样做为整个factor类注册了一个S3方法,因此改变了调用的每个函数的行为 reorder() 在一个因素上。

    由于这个问题是由软件包开发人员自己造成的,作为一个用户,除了亲自入侵S3系统以找到所需的实际方法之外,你几乎做不到什么。

        4
  •  7
  •   Brenton M. Wiernik    3 年前

    从R 4.0开始,您也可以使用main library()

    library(dplyr, include.only = c("select", "mutate"))
    library(dplyr, exclude = c("filter", "lag"))
    
        5
  •  1
  •   Martin Gal    2 年前

    answer ,导入包还允许您从自己的脚本中导入函数或其他对象,给R一种模块化的感觉,很像python模块。

    import::from(your_script.R, some_function, SOME_CONSTANT, and_whatever)
    

    裁判: https://cran.r-project.org/web/packages/import/vignettes/import.html