【问题标题】:How to determine precisely which libpath a loaded library has come from?如何准确确定加载的库来自哪个 libpath?
【发布时间】:2020-08-13 00:22:37
【问题描述】:

假设length(.libPaths()) > 1. R 将在第一个路径中查找任何库,如果在那里找不到,则在第二个路径中查找,依此类推,直到找到为止。如果在任何libPaths() 中都找不到该名称的库,则会出现there is no package called ‘library_name’ 错误

我们可以用sessionInfo()查看当前加载的包

我如何准确判断某个特定库是从哪个libPaths() 加载的?

【问题讨论】:

    标签: r


    【解决方案1】:

    我们正在与计算机打交道,所以这是可以预测的 :) 还有一条规则:.libPaths() 的第一场比赛获胜。

    R> .libPaths()
    [1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
    [3] "/usr/lib/R/library"           
    R> IP <- installed.packages()
    R> IP[IP[,"Package"]=="Rcpp", ]
                                                 Package 
                                                  "Rcpp" 
                                                 LibPath 
                         "/usr/local/lib/R/site-library" 
                                                 Version 
                                               "1.0.4.6" 
                                                Priority 
                                                      NA 
                                                 Depends 
                                                      NA 
                                                 Imports 
                                        "methods, utils" 
                                               LinkingTo 
                                                      NA 
                                                Suggests 
    "tinytest, inline, rbenchmark, pkgKitten (>= 0.1.2)" 
                                                Enhances 
                                                      NA 
                                                 License 
                                            "GPL (>= 2)" 
                                         License_is_FOSS 
                                                      NA 
                                   License_restricts_use 
                                                      NA 
                                                 OS_type 
                                                      NA 
                                                  MD5sum 
                                                      NA 
                                        NeedsCompilation 
                                                   "yes" 
                                                   Built 
                                                 "4.0.0" 
    R> 
    

    所以在这里我们看到 例如 Rcpp 来自第一个位置。我记得installed.packages() 将返回多个 as--以防您在多个地方都有一个包(如 e.g. 用户库和系统库)。

    【讨论】:

    • 很棒的信息。如果我理解正确,我们总是可以假设加载包的位置总是是找到该包的libPaths() 的第一个位置?
    • 正确。 (前几天我测试反向依赖时,这实际上咬了我一口,而要测试的版本被“仅用于测试”的临时库中的旧版本所遮蔽......在它之前.libPaths()。没有警告。只是加载“坏”的。出于效率原因,可以防御,但我脸上仍然有很多炒鸡蛋......)
    猜你喜欢
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多