r 检查包版本是否大于 x.y.z
r check if package version is greater than x.y.z
R 包的版本号如 1.97.1。我可以用
检查版本号
packageVersion("data.table")
在我的电脑上这个 returns 1.10.0.
我想做的是检查 data.table 版本是否比 1.9.7 更新,因为 1.9.7 之后的版本具有我的代码需要的功能。我试过将版本拆分成它的组成部分并以不同的方式评估它们,但我还没有想出任何可靠的方法来做到这一点。
非常感谢任何建议。
正如本杰明所建议的,正确的工具是 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
compareVersion(a, b)
的结果是
-1
如果 a < b
0
如果 a == b
1
如果 a > b
来源:
?utils::compareVersion
虽然 utils::compareVersion()
很好,但我会说使用 packageVersion()
和比较运算符(如评论中的@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
这在 ?packageVersion
的示例中有所说明; ?package_version
:
中明确记录了以这种方式使用比较运算符的能力
Functions numeric_version
, package_version
and
R_system_version
create a representation from such strings (if
suitable) which allows for coercion and testing, combination,
comparison, summaries (min/max), inclusion in data frames,
subscripting, and printing. The classes can hold a vector of such
representations.
如何使用包版本的小指南。
"package_version" and/or "numeric_version" 类 用于表示包版本。 (class(packageVersion("base"))
).
我们也可以使用 numeric_version
/as.numeric_version
函数进行转换。
numeric_version
和 package_version
函数(或与它们相关的 类 )有什么区别。 几乎没有区别。两者都是 .make_numeric_version
函数的包装器,后者有一种直接使用 R.version
.
的额外用法
v1 <- structure(list(c(1L, 10L, 1L)), class = "numeric_version")
# or numeric_version("1.10.1")
v2 <- `class<-`(list(c(1L, 9L, 8L)), class = "numeric_version")
v1 > v2
# This will still work as the numeric_version has a priority under the `>` operator
# so the simple character is converted to numeric_version.
v1 > "1.9.8"
"1.10.1" > v2
# direct comparison for characters will fail
"1.10.1" > "1.9.8"
# comparing with utils::compareVersion
compareVersion("1.10.1", "1.9.8")
# comparing versions vector with pacs::compareVersionsMax or pacs::compareVersionsMin
pacs::compareVersionsMax(c("1.1.1", "1.0.0", "3.3.3"))
R 包的版本号如 1.97.1。我可以用
检查版本号 packageVersion("data.table")
在我的电脑上这个 returns 1.10.0.
我想做的是检查 data.table 版本是否比 1.9.7 更新,因为 1.9.7 之后的版本具有我的代码需要的功能。我试过将版本拆分成它的组成部分并以不同的方式评估它们,但我还没有想出任何可靠的方法来做到这一点。 非常感谢任何建议。
正如本杰明所建议的,正确的工具是 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
compareVersion(a, b)
的结果是
-1
如果a < b
0
如果a == b
1
如果a > b
来源:
?utils::compareVersion
虽然 utils::compareVersion()
很好,但我会说使用 packageVersion()
和比较运算符(如评论中的@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
这在 ?packageVersion
的示例中有所说明; ?package_version
:
Functions
numeric_version
,package_version
andR_system_version
create a representation from such strings (if suitable) which allows for coercion and testing, combination, comparison, summaries (min/max), inclusion in data frames, subscripting, and printing. The classes can hold a vector of such representations.
如何使用包版本的小指南。
"package_version" and/or "numeric_version" 类 用于表示包版本。 (class(packageVersion("base"))
).
我们也可以使用 numeric_version
/as.numeric_version
函数进行转换。
numeric_version
和 package_version
函数(或与它们相关的 类 )有什么区别。 几乎没有区别。两者都是 .make_numeric_version
函数的包装器,后者有一种直接使用 R.version
.
v1 <- structure(list(c(1L, 10L, 1L)), class = "numeric_version")
# or numeric_version("1.10.1")
v2 <- `class<-`(list(c(1L, 9L, 8L)), class = "numeric_version")
v1 > v2
# This will still work as the numeric_version has a priority under the `>` operator
# so the simple character is converted to numeric_version.
v1 > "1.9.8"
"1.10.1" > v2
# direct comparison for characters will fail
"1.10.1" > "1.9.8"
# comparing with utils::compareVersion
compareVersion("1.10.1", "1.9.8")
# comparing versions vector with pacs::compareVersionsMax or pacs::compareVersionsMin
pacs::compareVersionsMax(c("1.1.1", "1.0.0", "3.3.3"))