【问题标题】:Change of location of R libraries throws error更改 R 库的位置会引发错误
【发布时间】:2021-07-17 10:34:13
【问题描述】:

我对 R 的库路径有疑问。也许答案已经存在,但我找不到。我将 R 与 RStudio 版本 1.1.456 一起使用。我所有的附加库都位于一个目录dir1 <- \\SHARE\TOOLS_OLD$\R-3.5.1 中,我在该目录中附加了.libPaths(dir1)。在此设置中,一切都按预期工作。

我将目录\\SHARE\TOOLS_OLD$\R-3.5.1 中的所有库复制到新位置\\NAS\TOOLSNEW$\R-3.5.1 后出现问题。我没有更新 R 版本,我想保持所有包版本相同,这样我的设置与以前完全相同。这就是我没有在新位置重新安装软件包的原因。

当我打开一个新的 R 会话并运行这三行代码时

dir2 <-  \\NAS\TOOLSNEW$\R-3.5.1
.libPaths(dir2)
.libPaths()

我得到.libPaths()的正确输出

[1] "\\\\NAS/TOOLSNEW$/R-3.5.1" "C:/Apps/R-3.5.1/library"

但 R 也会抛出错误:

Error: invalid version specification ‘NA’
In addition: Warning message:
In utils:::packageDescription(packageName, fields = "Version") :
no package 'knitr' was found

显然有些软件包会记住它们最初的安装位置。有没有办法将软件包复制到新位置而不重新安装它们?如果这不可能,是否有一种简单(即非手动)的方法来重新安装我的包树而不升级任何包(包括依赖项),即定义每个包的版本?

感谢您的帮助!

PS:这是我的会话信息,以防万一。

R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=German_Switzerland.1252  LC_CTYPE=German_Switzerland.1252    
LC_MONETARY=German_Switzerland.1252 LC_NUMERIC=C                       
[5] LC_TIME=German_Switzerland.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.5.1 tools_3.5.1    yaml_2.2.0    

【问题讨论】:

    标签: r package migration knitr


    【解决方案1】:

    问题可能有很多原因,例如复制包文件夹可能会丢失一些依赖项,或者注册表项不再匹配,但我在这里猜测。当您从旧版本复制软件包时,您必须运行 update.packages(但这可能会将任何软件包更新到您不想要的当前可用版本)。看看R-FAQ 和这个Stackoverflow question

    您可以使用devtools包安装特定版本的包。

    install.packages("devtools")
    require(devtools)
    
    install_version(somePackage, version = neededVersion)
    

    我是如何做到的,我创建了一个data.frame,其中包含具有相应版本号的所有必需包,例如

    > requiredPkgs
    
                       Package              Version 
    condformat         "condformat"         "0.9.0" 
    DT                 "DT"                 "0.17"  
    formattable        "formattable"        "0.2.1" 
    ggplot2            "ggplot2"            "3.3.3" 
    ggthemes           "ggthemes"           "4.2.4" 
    htmlTable          "htmlTable"          "2.1.0" 
    

    然后循环安装它们

    for(iPkg in requiredPkgs) {
      install_version(iPkg[1], version = iPkg[2]
    }
    

    【讨论】:

    • 非常感谢!我知道我可以手动完成。问题是我必须以这种方式安装很多软件包,所以我想知道是否有更好的解决方案。此外,我不知道为什么会出现这个问题。
    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2021-12-08
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2023-03-20
    • 2014-09-26
    相关资源
    最近更新 更多