问题标签 [renv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - renv::restore() 未能检索到较旧的软件包版本
我正在使用renv
一个需要使用旧版本mongolite
(1.0 版)的项目。我可以使用remotes::install_version("mongolite", "1.0")
. 但是,renv
无法在renv::restore()
. 我试图将显式源插入到lock
-file 中,如下所示:
(我也试过https://github.com/jeroen/mongolite/archive/refs/tags/v1.0.tar.gz
)。它只是没有工作(Error: failed to retrieve package 'mongolite'
)。我也尝试Sys.setenv(RENV_DOWNLOAD_FILE_METHOD = getOption("download.file.method"))
按照常见问题解答中的建议进行设置,但这也无济于事。
还有什么我可以尝试的吗?
r - 使用特定包构建 R 容器
为了应用 MLOps“左移”方法,我为每个项目从虚拟环境切换到容器。问题是,我想记录我使用的 R 包的版本,以便当我从 a 构建容器时,Dockerfile
我有一个包含所有正确包的容器。
我目前的方法是使用renv
锁定文件并调用renv::restore()
. Dockerfile
这种方法有效,但是每当我对环境进行快照时,renv
都会创建所有其他钩子,例如renv
文件夹,而这些钩子.Rprofile
在我的容器中是无用的,因为我拥有的唯一环境是容器之一。
有没有聪明的方法呢?
r - 离线环境下使用 renv 部署项目
renv
将软件包部署到离线机器的正确程序是什么?
我们有一个类似 CRAN 的内部存储库,通过options(repos = list(cran = "http://our.repo.url"))
在开发机器和部署机器上进行配置。它在 中指定renv.lock
。包renv
本身安装在两台机器上,并且都是相同的版本(1.14)。
部署后,在项目目录下启动R后,挂了一会儿,返回错误:
我如何告诉renv
要么从系统库复制自己,要么从内部存储库安装?
从系统库中复制当然是首选的做法,以节省编译时间。
r - 如何在新环境中安装 renv.lock 文件
我写了一个闪亮的应用程序,用来renv
保存工作环境和软件包版本。现在我想在 Digital Ocean 上部署该应用程序,但我找不到使用此环境的方法。
当我只是将 App 文件夹复制到/srv/shiny-server/
并尝试renv::restore()
它不起作用时。该应用程序仍会在日志中显示软件包丢失。有没有一种简单的方法来代替手动重新安装所有软件包?
r - 编译 R 后 R 和 RMarkdown 中缺少字体
我按照https://support.rstudio.com/hc/en-us/articles/215488098-Installing-multiple-versions-of-R上的说明在计算机上从源代码安装了旧版本的 R (4.0.2) -on-Linux和我在 RStudio 中使用rmarkdown
和打包以进行分析。knitr
我还使用renv
package 以获得更可重复的环境和代码。
我的问题是我的内联图缺少字体。这是一个例子:
我有一个有 2 列的表格,PT 和 M,我的代码是一个简单的 ggplot:
我真的不知道问题出在哪里:Linux 中缺少软件包,R、RStudio 或rmarkdown
?
有人有想法吗?
解决方案
我在我的 ubuntu 上安装了Helvetica.ttf.gz :
r - R:R 笔记本范围 (Rmd) 工作流程中的 renv
我正在寻找一种方法,使我的以 R 笔记本为中心的工作流程更具可重复性,并且随后更容易使用 Docker 进行容器化。对于我的中型数据分析项目,我使用一个非常简单的结构:一个与 .Rproj 关联的文件夹和一个 index.html(这是 Github Pages 的登录页面),其中包含其他文件夹,其中包含笔记本、数据、脚本等。这种简单的“1 GitHub repo = 1 Rproj”结构也适用于 Github Pages 呈现的我的 nb.html 文件。
我希望保留这个使用 R 笔记本作为文学编程工具和控制文档的工作流程(请参阅RMarkdown Driven Development),因为它似乎非常适合中等可重现的分析项目。不幸的是,缺乏关于使用 Rmd 的工作流的文档renv
,尽管它似乎与它很好地集成。
首先,谢一辉在这里暗示,与使用 renv 对单个 Rmd 文档相关的方法包括:renv::activate()
、renv::use()
和renv::embed()
. renv::activate()
只做部分工作renv::init()
:加载项目并获取init.R
. 据我了解,如果项目已经初始化,它会执行此操作,但它的行为就像renv::init()
项目未初始化:发现依赖项,将它们复制到 renv 全局包缓存,写入多个文件(.Rprofile、renv/activate.R、renv/ .gitignore,.Rbuildignore)。renv::use()
在独立的 R 脚本中运行良好,其中脚本的依赖项直接在该脚本中指定,我们需要在运行相关脚本时自动安装和加载这些包。renv::embed()
只是将 的紧凑表示嵌入renv.lock
到笔记本的代码块中 - 它通过添加具有依赖关系的代码块并删除对 .Rmd 的调用来更改渲染/保存时的 .Rmd renv::embed()
。据我了解,对于可重现的独立笔记本来说,使用renv::embed()
and可能就足够了。renv::use()
不过,我不介意将锁定文件放在目录中或保留 renv 库,只要它们都在同一个目录中。
其次,与RStudio 包管理器renv
一起使用,为后续的 Binder 或 Docker 需求做准备。Grant McDermott在这里提供了一些有用的代码(我认为可能在 .Rprofile 或 .Rmd 本身中)并提供了它的基本原理:
锁定文件是针对 RSPM 作为默认包存储库(即从哪里下载包)的引用,而不是通常的 CRAN 镜像之一。除其他外,这使得跨不同包版本的时间旅行和在 Linux 上快速安装预编译的 R 包二进制文件成为可能。
第三,我想使用here
包来处理相对路径。这似乎是让笔记本在传输时或在 Docker 容器内运行时运行的方法。不幸here::here()
的是,查找 .Rproj 并将在我的上层文件夹(即notebooks_project
)中找到它。.here
可以放置的文件会here::set_here()
覆盖此行为,使其here::here()
按预期指向笔记本文件夹(即notebook1
)。不幸的是,该.here
文件仅在重新启动 R 会话或运行时生效unloadNamespace("here")
(在此处记录)。
到目前为止,这是我尝试过的:
我希望我的 nobooks 能够在本地(已安装、缓存依赖项和初始化项目的位置)以及转移到其他系统时无需更改代码即可运行。每个笔记本都应该有自己的 renv 设置。
我有很多问题:
- 我的 renv 序列有什么问题?每次运行(初始化和之后)都调用是
renv::activate()
要走的路吗?我应该使用renv::use()
而不是renv::install()
andrenv::hydrate()
吗?renv::embed()
即使每个笔记本文件夹都应该有其renv.lock
和库,对于可重现的工作流程是否更好?renv
激活时还会创建一个 .Rproj 文件(例如notebook1.Rproj
),从而破坏了我的简单 1 repo = 1 Rproj - 这应该与我有关吗? - renv-RSPM 工作流程看起来很棒,但是将该脚本存储在 .Rprofile 中而不是将其存储在 Rmd 本身中是否有任何优势?
- 有没有更好的使用方法
here
?这unloadNamespace("here")
似乎很老套,但似乎是保留.here
文件使用的唯一方法。
r - `renv` 是否有可能被“绕过”或暂时关闭?
我有一个 RStudio 项目,它使用 来管理包renv
,效果很好。
但有时我想在我不想添加到项目中的主要环境(正确的词?)上使用库来调试或探索某些东西。例如,也许我想运行一些长时间的调试功能并beepr::beep()
在最后调用。如果不将beepr
软件包安装到项目中,这可能吗?
r - 错误:“rjags”的包或命名空间加载失败
我有一台运行 OS Big Sur 的 M1 Macbook Pro,只是尝试安装rjags
和JAGS
. 我从https://sourceforge.net/projects/mcmc-jags/下载 JAGS没有问题,然后运行install_packages("rjags")
,但是当我运行时出现library(rjags)
此错误:
我理解这意味着 R 无法“找到” JAGS 的安装。我正在使用renv
这个项目,但即使我停用它并重新运行install_packages("rjags")
,library(rjags)
我也会收到错误(只是使用不同的文件路径):
我是一个没有太多后端计算机专业知识的统计人员,所以我很感激帮助解决这个问题!
r - 由于 bslib,与 renv 共享闪亮的应用程序会引发错误
我想让内部共享/本地启动一个使用 {golem} 框架开发的闪亮应用更加健壮。
因此,我使用了该renv
包并将闪亮的应用程序作为本地包安装到项目文件夹中。
我进行如下操作(感谢@Kat 的建议):
使用初始化 renv
renv::init(bare = TRUE)
renv::install("my_local_package")
renv::snapshot(type = "all")
renv::isolate()
编写一个包含以下内容的启动文件:
- 共享文件夹。
但是,在另一台计算机(或 docker 测试环境)上启动闪亮的应用程序时,我收到以下由 package 引起的错误bslib
。当我删除缓存时也会发生同样的情况:
注意:即使我将缓存设置为项目本地并在项目文件夹中共享它,也会发生此错误。
但是,现在错误消息不引用全局缓存,而是引用项目本地缓存。不幸的是,它仍然是一个绝对路径,会给其他用户带来错误。
这一切都非常奇怪,我一点也不知道为什么会发生这种情况。
我想避免删除 bslib。
r - 全局缓存与库——什么用于加载包?
有人可以澄清一下全局缓存与 renv 中的项目库有何不同吗?renv 是否首先搜索项目库,然后搜索全局缓存?