R能否区分手动加载的库和依赖项

时间:2019-06-13 23:42:41

标签: r

我编写了一个函数来获取所有已加载软件包的名称和版本:

my_lib <- function(){

  tmp <- (.packages())
  tmp_base <- sessionInfo()$basePkgs
  tmp <- setdiff(tmp, tmp_base)

  tmp <- sort(tmp)
  tmp <- sapply(tmp, function(x){
    x <- paste(x, utils::packageVersion(x), sep = ' v')
  })
  tmp <- paste(tmp, collapse=', ')

  return(tmp)
}

这还将所有作为依赖项加载的软件包返回给其他软件包(例如,我加载了car,而carData被加载为依赖项)。

我想知道是否有办法只返回我手动加载的软件包(例如,car)? R能否说出手动加载与依赖加载之间的区别?

编辑:

添加了一行以使用sessionInfo()删除基本软件包

1 个答案:

答案 0 :(得分:1)

R在装入的包装和附加的包装之间有细微的差别。 使用library函数时会附带一个程序包, 并使导出的功能对用户的全局环境“可见”。 如果附有包装, 其名称空间已加载, 但是相反的情况不一定成立。

每个程序包可以定义两种主要的依赖关系类型:DependsImports。 前者中的软件包会在附加从属软件包后立即被附加, 但是后者中的软件包只会被加载。

这意味着您无法完全区分, 因为您可以致电library获取特定的软件包, 但其Depends所在的所有软件包也会被附加。 不过,您可以使用loadedNamespaces()search()区分加载和附加的软件包。