2012-02-16 17 views
19

मैंने अभी देखा है कि R के require() या library() फ़ंक्शंस के लिए कोई तर्क नहीं है। लोग क्या करते हैं जब उन्हें यह सुनिश्चित करने की आवश्यकता होती है कि उनके पास पैकेज का कम से कम कुछ संस्करण हो, ताकि उदा। वे जानते हैं कि कुछ बग तय है, या कुछ फीचर उपलब्ध है, या जो भी हो?आर पैकेज के न्यूनतम संस्करण की आवश्यकता

मैं पैकेज लेखकों के लिए Depends सामान के बारे में पता है, लेकिन मैं आदि कुछ स्क्रिप्ट, इंटरैक्टिव वातावरण, org-mode फ़ाइलें, कोड के टुकड़े में उपयोग करने के लिए की तलाश में हूँ,

उत्तर

7

मैं एक ऐसे के बारे में पता नहीं कर रहा हूँ समारोह, लेकिन यह एक बनाने के लिए काफी आसान होना चाहिए। आप इसे sessionInfo() या packageVersion() पर आधार कर सकते हैं। स्क्रिप्ट के लिए आवश्यक संकुल लोड करने के बाद, आप वहां से पैकेज नंबरों को फसल कर सकते हैं। एक समारोह है कि संस्करण संख्या की जाँच करता है की तरह (छद्म कोड में, जैसा कि मैंने समय नहीं है अभी) दिखेगा:

check_version = function(pkg_name, min_version) { 
    cur_version = packageVersion(pkg_name) 
    if(cur_version < min_version) stop(sprintf("Package %s needs a newer version, 
       found %s, need at least %s", pkg_name, cur_version, min_version)) 
} 

कॉलिंग यह होगा की तरह:

library(ggplot2) 
check_version("ggplot2", "0.8-9") 

आप अभी भी करने की जरूरत है संस्करण संख्याओं को उस चीज़ में पार्स करें जो तुलना cur_version < min_version की तुलना करता है, लेकिन बुनियादी संरचना वही बना है।

+3

धन्यवाद। ऐसा लगता है कि 'तुलना Version() 'संस्करण तुलना के लिए उपयोग करने के लिए सही बात है। –

+0

बहुत बढ़िया काम था, कुछ खुद को बनाने की कोशिश की, लेकिन इसकी जरूरत नहीं थी :)। –

+0

@ केनविल्लियम्स - अच्छा पकड़ो। मैंने इसे देखा था, और इसे अपने हेल्प-पेज स्टेटमेंट द्वारा ट्रैक से फेंक दिया गया था कि "आर पैकेज संस्करण संख्या फॉर्म 'x.y-z' 'के रूप में हैं। लेकिन यह वास्तविकता की तरह दिखता है कि यह '' '' '' '' '' '' '' '' '' '' '' '' है, '' '' '' '' –

14

आप packageVersion() इस्तेमाल कर सकते हैं:

packageVersion("stats") 
# [1] ‘2.14.1’ 

if(packageVersion("stats") < "2.15.0") { 
    stop("Need to wait until package:stats 2.15 is released!") 
} 
# Error: Need to wait until package:stats 2.15 is released! 

यह काम करता है क्योंकि packageVersion() वर्ग package_version की एक वस्तु देता है जो < बर्ताव के लिए के रूप में हम यह करना चाहते हैं (जब उनके उपयोग कर दो चरित्र तार की तुलना जो < काम नहीं चलेगा लेक्सिकोोग्राफिक ऑर्डरिंग)।

11

पॉल के छद्म कोड पढ़ने के बाद, यहां लिखा गया कार्य है।

use <- function(package, version=0, ...) { 
    package <- as.character(substitute(package)) 
    library(package, ..., character.only=TRUE) 
    pver <- packageVersion(package) 
    if (compareVersion(as.character(pver), as.character(version)) < 0) 
    stop("Version ", version, " of '", package, 
     "' required, but only ", pver, " is available") 
    invisible(pver) 
} 

यह कार्यों library() के रूप में मूलतः एक ही है, लेकिन एक अतिरिक्त version तर्क लेता है:

> use(plyr, 1.6) 
> use(ggplot2, '0.9') 
Error in use(ggplot2, "0.9") : 
    Version 0.9 of 'ggplot2' required, but only 0.8.9 is available 
संबंधित मुद्दे