R语言 使用不同版本的R包

R语言 使用不同版本的R包

R编程语言通过在线存储库中的不同软件包提供不同的功能。官方存储库CRAN持续更新这些包,并经常发布新版本的包。

R的软件包系统默认设置为覆盖现有版本的软件包,以便用户始终拥有最新的版本。因此,任何更新都会覆盖之前的版本。因此,如果你想使用两个版本的包,你必须把它安装在不同的位置,并且必须相应地通过指定那个位置来导入它。

语法

.libPaths()

返回默认查看软件包的路径。第一个路径是用户库,用户选择下载的软件包会安装在这里。第二条是系统库路径,在这里安装 R 自带的默认包。

要检查已安装的软件包,请使用此命令。

install.packages()

它返回所有已安装软件包的信息,如版本、安装路径、对R版本的依赖性、软件包所需的其他进口。

安装不同版本的包

有时,软件的最新版本可能会有巨大的变化,这使得用户不得不恢复到以前的版本。一些函数可能被弃用,类被删除,函数的参数被改变,这对使用早期版本的现有用户来说可能是个麻烦。因此,用户可能想为某个特定的功能安装一个过时的版本,然后再恢复到现有的库。

语法

remotes::install_version(package , version=版本号, lib =location)

这个函数将软件包安装在用户指定的位置lib。由于缺乏适当的构建/编译软件包的工具链,这个函数可能无法工作。默认情况下,R for Windows会从CRAN中安装预编译的 “二进制包”。CRAN归档的是软件包的源代码,而不是我们需要安装的二进制文件。因此,需要Rtools来构建和编译库。

CRAN上的 “版本 “包依赖于Revolution Analytics MRAN服务器来安装特定版本的包,而不需要安装Rtools来安装二进制包,但这将会追溯到MRAN发布的日期,也就是接近2014-09-17。

语法

versions::install.dates(pkgs, dates, lib)

从MRAN服务器下载并安装CRAN上托管的软件包的最新版本,截止到某一特定日期。

例子

# install yesterday's version of dslabs
versions::install.dates('dslabs', Sys.date() - 1)

语法

versions::install.version(pkgs, versions, lib)

从MRAN服务器下载并安装CRAN上托管的软件包的命名版本。

例子

# install specific version of caret
install.versions('caret', '6.0-77')

如果你已经有一个版本的软件包,而你想安装另一个版本,你必须改变R存储库的目录路径。即使版本不同,R也会覆盖之前安装的同一库。

在R会话中加载包

R搜索活动的库路径以找到所请求的包的安装。由于一个包的两个版本都安装在不同的位置,库函数仍然可以通过指定该包的位置来加载该包。

语法

library(package, lib.loc= location)

默认情况下,lib.loc = NULL ,这意味着R将在其默认的库路径中搜索软件包。

下面的例子说明了如何使用不同版本的包。

例子

# R program to illustrate working
# with different versions of a package.
  
library(versions)
library(fs)
  
# Create a new folder to install the 
# latest version of package.
old_lib_loc <- .libPaths()[1]
new_lib_loc <- path_home_r('R/new_lib/')
  
# install the latest version in the
# new location.
versions::install.versions('caret', version = '6.0-86', lib = new_lib_loc)
                  
# load the library from the default
# path(old_lib_loc) as lib is unspecified.
library(caret) 
  
# Creating sample sets
dat <- data.frame(x = rnorm(50))
class <- sample(c("Y", "N"), 50, TRUE)
  
# Training a model to fit data
fit <- train(dat, class, method = "glm")   
  
# Check the version of caret package in use
packageVersion('caret')   
  
extractProb(list(fit))    
# Displays error due to a internal bug 
# in that version of code.
  
# Detach the current caret package
detach("package:caret")    
  
#if(!require("caret"))
  #install.packages("caret")
  
# loads the newer version of package
# installed in new_lib
library(caret, lib.loc = new_lib_loc)  
  
# check the version of caret package in use
packageVersion('caret')  
  
# returns the training and test data prediction as
# the bug is fixed in this version of package.
extractProb(list(fit))

输出:

[1] ‘6.0.86’
           N         Y obs pred model dataType  object
1  0.6343887 0.3656113   N    N   glm Training Object1
2  0.6359912 0.3640088   N    N   glm Training Object1
.
.
49 0.6805284 0.3194716   N    N   glm Training Object1
50 0.6582383 0.3417617   N    N   glm Training Object1
[1] ‘6.0.86’
           N         Y obs pred model dataType  object
1  0.6343887 0.3656113   N    N   glm Training Object1
2  0.6359912 0.3640088   N    N   glm Training Object1
.
.
49 0.6805284 0.3194716   N    N   glm Training Object1
50 0.6582383 0.3417617   N    N   glm Training Object1

使用packrat或renv工作

R会话中的任何安装、升级或更改都会带来R目录的变化,该目录在所有R会话中共享。不同的项目可能需要不同的软件包,因此可能会有很多不同的软件包依赖关系。因此,我们可能会改变一些在全局环境中共享的功能,从而影响所有其他会话。所以我们需要一个像python这样的 “虚拟环境 “来管理这些冲突的依赖关系。因此,项目本地库的想法就诞生了。

Packrat ““renv “ 是R中为这些目的提供的包。这些包有助于隔离不同的项目,这样一个项目就不会影响另一个项目,为每个项目提供自己的私有包库,使项目可移植,这样就很容易安装你的项目所依赖的包,并复制项目所需的确切的包版本。

Renv是一个用于R的依赖性管理工具包。使用’renv’,你可以创建和管理项目本地的R库,保存这些库的状态,以后根据需要恢复你的库。这些工具结合在一起,可以帮助你的项目更加孤立、可移植和可重复。

如果你已经拿起做一些项目,在实际工作之前,你必须解决版本控制问题;找到要使用的包的正确版本,或者必须处理依赖关系。Renv提供了更干净、更简单的方式来做到这一点。Renv解决了包的管理问题,但没有处理不同版本的R。 使用Renv的工作流程。

  • 当你的项目开发到一定程度,并且你认为你或其他人将来可能要再次回到这个项目,通过运行 _ renv::init()_ 你可以初始化renv。

语法: renv::init(project = NULL, profile = NULL,settings = NULL,bare = FALSE,force = FALSE, restart = interactive() )

参数

  • project。项目目录。
  • profile:要激活的配置文件,例如 “开发 “或 “生产”。如果是NULL,则激活默认配置文件。
  • settings:设置。新启动的项目要使用的设置列表。
  • bare(布尔值)。如果为 “True”,则初始化项目时不尝试发现和安装R包的依赖关系。
  • force (布尔值)。默认情况下,renv会拒绝将主目录初始化为项目。
  • restart (Boolean): 在初始化项目后尝试重新启动R会话?如果嵌入R的前端设置了 “重启 “R选项,则会尝试重启会话。

发现当前项目中使用的软件包,然后用这些软件包初始化一个项目本地的私有R库。任何正在使用的软件包的当前安装版本(如在默认的R库中检测到的)随后被安装到项目的私有库中。

要启动一个新的项目并在其中初始化renv,请使用project参数来指定项目目录的位置。

使用不同版本的R包

这将建立一个具有私有库的项目本地环境,并确保将你使用的所有包安装到该库中。 你将得到你所有的软件包和版本依赖,并存储在一个叫做 _ renv.lock_ 的文件中 _ 。_ Renv还将写入活动项目目录下的文件,包括lockfile和项目目录下的’renv’文件夹,其中包含私有库和激活脚本,以加载项目。

使用不同版本的R包

运行 . libPaths()来检查项目中初始化了renv的库路径。

  • 要将项目库的状态保存到 renv.lock 中,请调用 _ renv::snapshot()_ 或调用 _ renv::restore(_ )来恢复到锁文件中编码的先前状态。
  • 通过运行 _ renv::restore()_ ,你将能够从renv.lock中重新安装所有依赖项,以确保你的项目设置尽可能接近你离开时的状态,并大大减少遇到与软件包版本有关的问题的机会。

例子

# R program with renv initialized 
# in project directory.
  
# install digest 
# Installs the package into a private 
# library.
renv::install("digest")
  
# save library state to lockfile
# Updates a lockfile capturing the state 
# of a project's R package dependencies. 
# The lockfile can be used to later restore 
# these project's dependencies as required.
renv::snapshot()
  
# remove digest from library
renv::remove("digest")
  
# check library status
# Reports the differences between the 
# project's lockfile and the current state
# of the project's library (if any)
renv::status()
  
# restore lockfile, thereby reinstalling digest
# Restore a project's dependencies from a lockfile,
# as previously generated by snapshot().
renv::restore()

使用不同版本的R包

下面的程序演示了如何配置renv设置,如在项目目录下工作时启用或禁用自动快照。

例子

# R program to change renv settings.
  
# disable automatic snapshots
auto.snapshot <- getOption("renv.config.auto.snapshot")
options(renv.config.auto.snapshot = FALSE)
  
# restore automatic snapshots
options(renv.config.auto.snapshot = auto.snapshot)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程