【问题标题】:Checking if an r package is currently attached检查当前是否附加了 r 包
【发布时间】:2016-10-06 17:13:12
【问题描述】:

我的工作流程有问题,因为我在 rmarkdown 中采购了多个脚本,其中一些需要 dplyr 包,其中一些使用 plyr

问题是rename 函数存在于两个包中,如果当前附加了dplyrplyr 中的rename 函数将不起作用。

如何在我的脚本中包含一个函数来检查dplyr 是否已附加,如果是,则将其分离?

我知道如何通过detach("package:dplyr", unload = TRUE) 分离包。我不知道如何检查包裹是否已附加。

【问题讨论】:

  • 在函数调用中可能更容易明确...plyr::rename
  • 而不是修改附加的包(这可能不是用户想要的!)你应该具体并使用dplyr::renameplyr::rename
  • 或者更好的是,重构您的代码以始终使用一个版本的重命名。
  • 谢谢@user20650 @Gregor 和@Hong Ooi。好建议。这是否意味着每个函数调用都应该在函数之前指定包,或者你只是意味着只为你提前知道不能很好地协同工作的包做它?将来我将使用data.table::setnames 来重命名特定的列
  • @Hong Ooi 我不明白你说的“重构代码以一致地使用一个版本的重命名”是什么意思?

标签: r dplyr plyr


【解决方案1】:

这里值得注意的是,软件包本身会警告您按特定顺序加载它们。如果你加载 dplyr,然后 plyr,你会得到一个警告:

您在 dplyr 之后加载了 plyr - 这可能会导致问题。 如果您需要 plyr 和 dplyr 的函数,请先加载 plyr,然后加载 dplyr: 图书馆(plyr);库(dplyr)

我的理解是,如果 dplyr 的功能被 plyr 弃用,dplyr 就不能很好地工作,但是由于 dplyr 从 plyr 弃用的功能是有效的更新,它们应该可以很好地发挥作用。因此,请确保以正确的顺序加载它们:

library(plyr)
library(dplyr)

编辑:我重新阅读了您的问题,您的问题是 dplyr 弃用了 plyr 功能,所以我的观点与您不太相关,抱歉。我会把它留在这里以防其他人需要这些信息,因为它在不久前引起了我的问题:P

【讨论】:

  • 谢谢@rosscova。问题是我有一个 rmarkdown 文档,其中包含很多不同的脚本,其中包含很多代码,编写时间相当长,所以我很难记住 dplyr 在这些脚本中出现的位置(以及哪些脚本 那些脚本有来源)。我想这些只是你从经验中学到的东西。
【解决方案2】:

我同意最好的方法是使用dplyr::renameplyr::rename 来明确调用你想要的函数。

但是,如果您确实想检查是否附加了包裹,然后将其分离,我会使用

if("plyr" %in% (.packages())){
  detach("package:plyr", unload=TRUE) 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2012-04-19
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多