R軟件包的版本號如1.97.1。我可以查看版本號是否與r檢查軟件包版本是否大於x.y.z
packageVersion("data.table")
在我的電腦上,這返回1.10.0。
我想要做的是檢查data.table版本是否比1.9.7更新,因爲1.9.7之後的版本具有我的代碼需要的功能。我試圖將版本分解爲各個組成部分,並以不同的方式對它們進行評估,但我還沒有想出任何可行的方法。 任何建議非常感謝。
R軟件包的版本號如1.97.1。我可以查看版本號是否與r檢查軟件包版本是否大於x.y.z
packageVersion("data.table")
在我的電腦上,這返回1.10.0。
我想要做的是檢查data.table版本是否比1.9.7更新,因爲1.9.7之後的版本具有我的代碼需要的功能。我試圖將版本分解爲各個組成部分,並以不同的方式對它們進行評估,但我還沒有想出任何可行的方法。 任何建議非常感謝。
雖然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
:
函數「numeric_version」,「PACKAGE_VERSION」和 「R_system_version」創建從這樣的字符串表示(如果 合適),其允許對脅迫和測試,組合, 比較,總結(最小/最大),包含在數據框中, 下標和打印。這些類可以保存這種表示的向量。
'compareVersion()'不尊重[語義版本控制的優先規則](http://semver.org/#spec-item-11)。 '「1.2.3.9000」'表示開發版本,但「compareVersion(」1.2.3.9000「,」1.2.3「)爲'1'。是否有遵循約定的預先建立的替代方案? – landau
不是我所知道的。 –
正如本傑明建議,正確的工具是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'函數。 – Benjamin
甚至只是'如果(packageVersion(「data.table」)>「1.9.7」){print(「OK!\ n」)}' – G5W
@Benjamin - 你應該做出答案。我從來沒有聽說過這個功能 - 看起來很有用。 – thelatemail