r检查软件包版本是否大于xyz

Jer*_*ryN 5 r version package

R软件包的版本号如1.97.1。我可以检查版本号

 packageVersion("data.table")
Run Code Online (Sandbox Code Playgroud)

在我的计算机上,这将返回1.10.0。

我想做的是检查data.table版本是否比1.9.7更新,因为1.9.7之后的版本具有我的代码需要的功能。我尝试过将版本分为各个组成部分,并以不同的方式对其进行评估,但是我还没有找到任何可靠的方法来执行此操作。任何建议,不胜感激。

Ben*_*ker 10

虽然utils::compareVersion()很好,但我会说使用packageVersion()with 比较运算符(如注释中的@G5W 所示)更简单:

packageVersion("data.table")
[1] ‘1.10.0’
> packageVersion("data.table")>"1.9.8"
[1] TRUE
> packageVersion("data.table")>"1.10.01"
[1] FALSE
> packageVersion("data.table")=="1.10.0"
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

这在以下示例中进行了说明?packageVersion;以这种方式使用比较运算符的能力明确记录在?package_version

函数numeric_versionpackage_versionR_system_version从此类字符串(如果合适)创建表示,允许强制和测试、组合、比较、汇总(最小值/最大值)、包含在数据帧中、下标和打印。这些类可以保存这种表示的向量。


Fr.*_*Fr. 6

正如本杰明所建议的,正确的工具是compareVersion

version_above <- function(pkg, than) {
  as.logical(compareVersion(as.character(packageVersion(pkg)), than))
}

packageVersion("ggplot2")
# [1] '2.2.1'
version_above("ggplot2", "2.0.0")
# [1] TRUE
version_above("ggplot2", "3.0.0")
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)

结果compareVersion(a, b)

  • -1 如果 a < b
  • 0 如果 a == b
  • 1 如果 a > b

来源:

?utils::compareVersion