gpt4 book ai didi

r - 是否可以在需要/加载后覆盖对包的(重新)安装的阻止?

转载 作者:行者123 更新时间:2023-12-03 18:41:33 27 4
gpt4 key购买 nike

实际问题

在需要/加载包后,是否可以覆盖对包的(重新)安装的阻止?

我知道阻止“真实”重装一旦包被使用,加载包的库就非常有意义。但我的用例有点不同

背景

我喜欢有一个“沙箱库”来测试自己的包的想法。除了要测试的包之外,这些沙箱库还包含干净的 R 基础安装的所有基础包 为了让我的整个包构建和测试框架正常工作,一些必要的 contrib 包(例如 digeststringr 等)。但是,我的框架从标准库和 加载了后面的包。然后 需要将它们安装到沙箱库 - 这是被阻止的。因此,我的问题是是否可以覆盖这一点,因为我在实现该块时并没有真正按照人们的想法去做。

插图

指定两个库的路径

lib         <- file.path(R.home(), "library")
lib.sandbox <- file.path(tempdir(), "library")

创建沙箱库
dir.create(lib.sandbox, showWarnings=FALSE)

安装包到标准库并加载
install.packages("digest", lib=lib)
require("digest", lib.loc=lib)

然后也安装到沙箱库
> install.packages("digest", lib=lib.sandbox)
Warning: package 'digest' is in use and will not be installed

我的框架计算出某些东西 某些也应该安装到沙箱库的包被加载,所以我不能在初始加载步骤之前放置“安装到沙箱库”步骤。

最佳答案

这是您在答案中建议的一般版本。这将在安装之前卸载包,然后从同一位置重新加载包。

install.packages.sandbox <- function(pkgs, lib, repos=getOption("repos"), ...) {
if (is.null(repos))
stop("Can't install from source. Need package name.")
pkg.pos <- grep(pkgs, search())
pkg.path <- searchpaths()[grep(pkgs, searchpaths())]
in.use <- length(pkg.pos) > 0
# detach
if (in.use) do.call(detach,
list(pkg.pos),
envir=.GlobalEnv)
# install
utils::install.packages(pkgs, lib, repos, ...)
# re-attach from original library location
if (in.use) library(pkgs,
character.only=TRUE,
lib.loc=.libPaths()[sapply(.libPaths(), grepl, pkg.path)])
}

关于r - 是否可以在需要/加载后覆盖对包的(重新)安装的阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13163248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com