2013-07-16 6 views
8

जब मैं यामल पैकेज स्थापित करता हूं, तो एक कष्टप्रद त्रुटि संदेश RStudio में पॉप अप करता है अगर इसे पहले स्थापित किया गया था। मैं कैसे बता सकता हूं कि पैकेज पहले से स्थापित है या नहीं, इसलिए मैं अपने कोड में निर्णय ले सकता हूं कि पैकेज इंस्टॉल करना है या नहीं?मैं कैसे बता सकता हूं कि कोई निश्चित पैकेज पहले से स्थापित है या नहीं?

संदेश एक पॉप अप विंडो में है और यह है:

एक या संकुल है कि इस स्थापना द्वारा अद्यतन किया जाएगा के और अधिक वर्तमान में लोड कर रहे हैं। इन पैकेजों को अद्यतन करने से पहले पुनरारंभ करना दृढ़ता से अनुशंसित है। RStudio R को पुनरारंभ कर सकता है और फिर स्वचालित रूप से पुनरारंभ करने के बाद स्थापना जारी रखता है (सभी कार्य और डेटा पुनरारंभ के दौरान संरक्षित) होगा। क्या आप से पहले आर को पुनरारंभ करना चाहते हैं?

+0

पुन: उत्पन्न नहीं किया गया। मुझे कोई त्रुटि संदेश नहीं मिला। (मुझे एक सूचनात्मक संदेश मिलता है जो मुझे बता रहा है कि यह स्थापित किया गया था।) आह। यह एक RStudio सूचनात्मक संदेश है, आर –

+0

से कोई संदेश नहीं ... आप बार-बार इसे इंस्टॉल करने का प्रयास क्यों कर रहे हैं? एक स्थापित पैकेज लोड करने के लिए आदेश 'पुस्तकालय (foo) 'है। क्या आप गलती से 'install.packages' चला रहे हैं? –

+1

मैं कोड लिख रहा हूं जो उन कंप्यूटरों पर चलाया जाएगा जिन्होंने कभी पहले आर का उपयोग नहीं किया है। तो कोड को पहले install.packages ("yaml") होना चाहिए। मुझे चिंतित है कि यदि कोई उपयोगकर्ता किसी कारण से कोड को दो बार चलाता है, तो संदेश पॉप अप हो जाएगा और वे उलझन में होंगे। – kng

उत्तर

12

यह yaml लोड होगा, यह पहली स्थापित करने अगर इसके पहले से ही स्थापित नहीं:

if (!require(yaml)) { 
    install.packages("yaml") 
    library(yaml) 
} 

या आप इसे parameterize करना चाहते हैं:

pkg <- "yaml" 
if (!require(pkg, character.only = TRUE)) { 
    install.packages(pkg) 
    if (!require(pkg, character.only = TRUE)) stop("load failure: ", pkg) 
} 

अद्यतन। Parametrization।

+0

धन्यवाद! यह पूरी तरह से काम करता है। – kng

+0

मेरे 'tryCatch' हैक से काफी बेहतर है। अपनाना होगा। – krlmlr

8

आप installed.packages() का उपयोग इंस्टॉल किए गए पैकेज

1

खोजने के लिए मैं अपने कोड में निम्नलिखित निर्माण का उपयोग कर रहा जा सकता है। अनिवार्य हिस्सा tryCatch भीतर library बुला और इसे स्थापित करने अगर यह विफल बारे में है:

lib.auto <- function(lib, version=NULL, install.fun=install.packages, ...) { 
    tryCatch(
    library(lib, character.only=T), 
    error=function(e) { 
     install.fun(lib, ...) 
     library(lib, character.only=T) 
    } 
) 
    if (!is.null(version)) { 
    if (packageVersion(lib) < version) { 
     require(devtools) 
     detach(paste0('package:', lib), unload=T, character.only=T) 
     install.fun(lib, ...) 
     library(lib, character.only=T) 
     if (packageVersion(lib) < version) { 
     stop(sprintf('Package %s not available in version %s. Installed version: %s', lib, version, 
        packageVersion(lib))) 
     } 
    } 
    } 
} 

lib.auto('BiocInstaller', 
     install.fun=function(lib) { 
      source("http://bioconductor.org/biocLite.R") 
      biocLite(lib) 
     }) 

options(repos=biocinstallRepos()) 
lib.auto.bioc <- lib.auto 

lib.auto.github <- function(lib, version=NULL, user, subdir=NULL, repo=lib) 
    lib.auto(lib, version=version, 
      install.fun=function(l, u, s, r) { 
      require(devtools) 
      install_github(r, u, subdir=s) 
      }, 
      user, subdir, repo   
) 

lib.auto समारोह, क्रैन और BioConductor से स्थापित करता है यदि आवश्यक हो। lib.auto.github गिटहब से स्थापित करता है।

मैं इस कोड को पैकेज में धक्का देने के बारे में सोच रहा हूं।

3

वैकल्पिक रूप से, आप require फ़ंक्शन का उपयोग कर सकते हैं। यह पैकेज को लोड करने का प्रयास करेगा और चुपचाप तार्किक बताएगा कि पैकेज उपलब्ध है या नहीं। पैकेज को लोड नहीं किया जा सकता है तो एक चेतावनी भी है।

test1 <- require("stats") 
test1 

test2 <- require("blah") 
test2 
संबंधित मुद्दे

 संबंधित मुद्दे