2017-01-05 41 views
2

R軟件包的版本號如1.97.1。我可以查看版本號是否與r檢查軟件包版本是否大於x.y.z

packageVersion("data.table") 

在我的電腦上,這返回1.10.0。

我想要做的是檢查data.table版本是否比1.9.7更新,因爲1.9.7之後的版本具有我的代碼需要的功能。我試圖將版本分解爲各個組成部分,並以不同的方式對它們進行評估,但我還沒有想出任何可行的方法。 任何建議非常感謝。

+4

'utils'包具有'compareVersion'函數。 – Benjamin

+4

甚至只是'如果(packageVersion(「data.table」)>「1.9.7」){print(「OK!\ n」)}' – G5W

+0

@Benjamin - 你應該做出答案。我從來沒有聽說過這個功能 - 看起來很有用。 – thelatemail

回答

2

雖然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」創建從這樣的字符串表示(如果 合適),其允許對脅迫和測試,組合, 比較,總結(最小/最大),包含在數據框中, 下標和打印。這些類可以保存這種表示的向量。

+0

'compareVersion()'不尊重[語義版本控制的優先規則](http://semver.org/#spec-item-11)。 '「1.2.3.9000」'表示開發版本,但「compareVersion(」1.2.3.9000「,」1.2.3「)爲'1'。是否有遵循約定的預先建立的替代方案? – landau

+0

不是我所知道的。 –

2

正如本傑明建議,正確的工具是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

相關問題