【问题标题】:Installing and loading packages with a single function安装和加载具有单一功能的包
【发布时间】:2014-08-09 06:33:36
【问题描述】:

我一直在尝试编写一个函数来替换 R 的 library 和 install.packages 函数,如果已安装则加载函数,如果未安装则安装并加载。它适用于第一种情况,但是当我尝试使用它安装一个函数时,即使在安装后它也会给出“没有名为...的包”错误。软件包安装正确,但我未能在同一功能的单次运行中安装和加载。我添加了 sleep 命令,希望它能修复它,但它没有。有人知道为什么吗?

insist = function(name){
    #enables entering package name without quotes
    name = substitute(name) 
    name = as.character(name)

    if (!require(name, character.only = T)) {
        install.packages(name)
        Sys.sleep(2)
        library(name, character.only = T)
    }
}

【问题讨论】:

  • 在安装p_load 后查看github.com/trinker/pacman 完全符合您的要求。
  • 他似乎使用分层结构来安装包并加载它们,但我在他的代码中找不到任何根本不同的东西可以让他工作并解释为什么我的失败。当我有更多时间时会彻底检查

标签: r function install.packages


【解决方案1】:

该消息实际上来自require(),而不是install.packages()library()。我敢打赌它仍然被添加到您的搜索路径中(至少它对我来说是)。因此,我认为您必须更加积极地压制该警告。试试这个。

insist = function(name){
    #enables entering package name without quotes
    name = substitute(name) 
    name = as.character(name)

    if (suppressWarnings(!require(name, character.only = T, quietly=T))) {
        install.packages(name)
        library(name, character.only = T)
    }
}

【讨论】:

  • 事实并非如此。第 6 行的初始 require 发出警告,包 ... 不可用。我对此没有任何问题,但是错误来自库最终尝试加载包的尝试。作为最终结果,我遇到了一个错误,并且没有加载包,只是安装了包。
  • 您是否使用调试器单步执行该功能以确认?如果是这种情况,那么我无法复制您的错误。我上面的代码使用我测试的包运行错误/警告免费。
  • 奇怪的是它没有给出错误。由于某种原因,它本身变成了logical.return True 并返回警告。但它显然来自图书馆不需要。我什至尝试手动将logical.return 设置为false,但它不起作用Warning message: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no package called ‘corrplot’
猜你喜欢
  • 2020-11-25
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多