如果已加载,则在 R 中分离特定的包

Posted

技术标签:

【中文标题】如果已加载,则在 R 中分离特定的包【英文标题】:detach specific package in R if loaded 【发布时间】:2016-04-05 13:15:15 【问题描述】:

我的代码中遇到了一些plyrdplyr 的问题,所以我想分离plyr 包,以防它之前被加载过。

这是我走了多远,

ifelse(sum(grepl("package:plyr",search()))==0,
       "plyr not loaded",
       detach("package:plyr"))

但是这段代码抛出了一个

Error in ifelse(sum(grepl("package:plyr", search())) == 0, 
"plyr not    loaded",  : 
substitution has length 0 
Additional warning:
In rep(no, length.out = length(ans)) :
'x' is NULL so the result will be NULL

【问题讨论】:

发生这种情况是因为detach 返回 NULL(例如,ifelse(0, 1, NULL)),否则使用 ifelse 就可以了:例如,ifelse(sum(grepl("package:plyr",search()))==0, "plyr not loaded", detach("package:plyr"); invisible(0)) 可以工作 【参考方案1】:

这里有一个解决方案:

if(any(grepl("package:plyr", search()))) detach("package:plyr") else message("plyr not loaded")
## plyr not loaded
library("plyr")
## if(any(grepl("package:plyr", search()))) detach("package:plyr") else message("plyr not loaded")

通常您希望将ifelse 用于程序控制,而ifelse() 仅用于矢量化逻辑操作,例如数据重新编码。

【讨论】:

以上是关于如果已加载,则在 R 中分离特定的包的主要内容,如果未能解决你的问题,请参考以下文章

我必须从已删除的元素中分离事件吗? [复制]

如何在 JPA 中分离关联对象

如何强制从另一个 SSH 会话中分离屏幕?

从 Access 应用程序中分离出组件 VB

如何判断你的头是不是在 git 中分离?

如何从模板组件中分离模板(延迟加载模板)