R 通过未导出函数方法定位包
经常出现的一种情况是,具有重写函数的包在依赖于某些函数定义的包中导致意外错误(例如R 通过未导出函数方法定位包,r,find,package,R,Find,Package,经常出现的一种情况是,具有重写函数的包在依赖于某些函数定义的包中导致意外错误(例如MASS::negative.binomian和GLMMadaptive::negative.binomian具有不同的参数,这会导致某些依赖的包失败) 如果从包中导出函数冲突,则通常可以通过以下方式实现不需要关闭和打开R的修复: pck <- find("negative.binomial") if(length(pck) > 0){ suppressWarnings(sapply(unlist
MASS::negative.binomian
和GLMMadaptive::negative.binomian
具有不同的参数,这会导致某些依赖的包失败)
如果从包中导出函数冲突,则通常可以通过以下方式实现不需要关闭和打开R
的修复:
pck <- find("negative.binomial")
if(length(pck) > 0){
suppressWarnings(sapply(unlist(pck), function(x)
detach(x, unload = TRUE,
force = TRUE, character.only = TRUE))
}
if(length(find("negative.binomial")) == 0)
cat("Succes!\n")
如果只将函数方法设为字符串,如何查找附带的
包,其中包含特定的非导出函数或方法 库(lme4)
library(lme4)
library(car)
fun <- "influence.merMod"
p <- loadedNamespaces()
p[vapply(p, function(p) fun %in% ls(envir = asNamespace(p)), FUN.VALUE = FALSE)]
#[1] "car" "lme4"
图书馆(汽车)
乐趣库(lme4)
图书馆(汽车)
fungetAnywhere
将查找所有出现的情况,然后我们可以从它返回的结构中提取名称
unique(sub(".*[ :]", "", getAnywhere("influence.merMod")$where)
## [1] "lme4" "car"
getAnywhere
将查找所有出现的情况,然后我们可以从它返回的结构中提取名称
unique(sub(".*[ :]", "", getAnywhere("influence.merMod")$where)
## [1] "lme4" "car"
无法屏蔽未导出的函数,因为程序包需要显式导入它,并且用户在没有为程序包添加前缀的情况下无法访问它。可能是这样,我的问题仍然存在。如何定位包含未导出的函数或方法的包,只需使用类似于find(…)
的方法。未导出的函数不能被屏蔽,因为包需要显式导入,并且用户无法在不添加包前缀的情况下访问它。可能是这样,我的问题仍然存在。只有使用类似于find(…)
的方法,才能找到包含未导出的函数或方法的包。