2015-05-19 6 views
15

अजगर मैं के साथ एक विशेष समारोह या कार्यक्षमता लोड कर सकते हैं के रूप में:अजगर की `आर बराबर एक्स आयात y से z`

from x import y as z

मैं कैसे आर में यह दोहराने कर सकते हैं?

उदाहरण के लिए, मैं बजाय साथ library(plyr)

+2

आप 'plyr :: count()' कर सकते हैं। यह आपको पैकेज लोड किए बिना फ़ंक्शन तक पहुंच प्रदान करेगा। – eipi10

+1

@ ग्रेगोर: वे काफी समान नहीं हैं। आपके द्वारा संदर्भित एक संपूर्ण पैकेज को एक अलग नाम के तहत आयात करने के बारे में है, जबकि यह पूछ रहा है कि पैकेज से एक फ़ंक्शन कैसे आयात करें और फ़ंक्शन को एक अलग नाम दें। –

+2

सहमत, जोश। मैं अपना करीबी वोट समाप्त कर दूंगा और इसके बजाय बस 'बारीकी से संबंधित: ["आर में आयात करें"] (http://stackoverflow.com/q/24391251/903061)' – Gregor

उत्तर

19

मैं शायद count <- plyr::count करता हूं, इसलिए मुझे यह सुनिश्चित करने से परेशान नहीं होना पड़ेगा कि मुझे तर्क सही हो।

और तुम, एक में है कि परिभाषा रैप करने के लिए अगर बयान मामले plyr में चाहते हो सकता है स्थापित नहीं है:

if (requireNamespace("plyr")) 
    count <- plyr::count 
else 
    stop("plyr is not installed.") 

इसके अलावा, आप import और/या modules संकुल, जो python- प्रदान में रुचि हो सकती आर के लिए आयात/मॉड्यूल तंत्र की तरह।


इसके अलावा Writing R Extensions की Adding new generics section (मूल जोर) से चेतावनी पर ध्यान:

इस पुस्तिका के संस्करणों foo.default <- base::foo बताए का सुझाव दिया। यह एक अच्छा विचार नहीं है, क्योंकि यह [पैकेज] स्थापना के समय बेस फ़ंक्शन को कैप्चर करता है और आर को पैच या अपडेट किया जा सकता है।

तो यह count <- plyr::count सिंटैक्स का उपयोग करना उचित रहेगा अगर यह एक लिपि में परिभाषित किया है आप source आईएनजी हो, लेकिन आप स्पष्ट रूप से एक नया कार्य को परिभाषित करने और सभी तर्कों को निर्दिष्ट करना चाहिए अगर आप एक पैकेज में यह करते हैं।

+0

अच्छा, क्यों नहीं 'else' में '{install.packages (" plyr ") है; गिनती <- plyr :: count} ' –

+2

@dimitris_ps: आप कर सकते थे, लेकिन मैं ऐसी स्थिति के बारे में सोच रहा था जहां मेरा कोड किसी अन्य समारोह में लपेटा जाएगा, इस मामले में मैं इसे चीजों को डाउनलोड करने से नहीं रोकना चाहता। –

6

कोई सीधे, अनुसंधान में बराबर कार्यक्षमता है, हालांकि के रूप में अन्य उत्तर का उल्लेख किया है पूरे पैकेज को लोड करने की, plyr से सिर्फcount समारोह लोड करने के लिए चाहते हैं, आप इसी तरह के परिणाम प्राप्त कर सकते हैं।

library तर्क दोनों भार पैकेज नाम स्थान और खोज सूची में देता। जैसा कि Joshua Ulrich द्वारा नोट किया गया है लोडके बिना पैकेज नामस्थान खोज सूची में नामस्थान को जोड़ना संभव है। library का उपयोग करना वास्तव में loadNamespace और attachNamespace दोनों को कॉल करता है।

लोड हो रहा है बनाम संलग्न सबसे अच्छा कोई है जो व्यापक पैकेज विकास विशेषज्ञता (ऊपर उल्लिखित श्री उलरिच मन में आता है) तो मैं हैडली विकहैम द्वारा this write-up on namespaces में आगे पढ़ने का सुझाव है द्वारा समझाया गया है का गौरव प्राप्त।

टिप्पण लायक है, तथापि, कि आप pos तर्क library() में परिभाषित करने के लिए, के रूप में documentation for the library statement में विस्तार से बताया उपयोग कर सकते हैं जहाँ आप पैकेज नाम स्थान संलग्न कर रहे हैं।

+3

यह बिल्कुल सही नहीं है। संकुल * पूरी तरह से खोज पथ में * संलग्न * या * unattached * हैं, लेकिन उन्हें उपयोग करने के लिए संलग्न होने की आवश्यकता नहीं है। संलग्न किए बिना पैकेज नामस्थान लोड किया जा सकता है। –

+0

मैं देखता हूं कि आपका क्या मतलब है। मैं यहां अपनी गहराई से थोड़ा सा हूं; क्या आप ऐसा संपादन कर सकते हैं जो इसे स्पष्ट करता है? मैं इस पर झूठी जानकारी पोस्ट नहीं करना चाहता हूं और हमेशा _attaching_ बनाम _loading_ पर अपने तारों को पार करना चाहता हूं। – TARehman

+0

'आवश्यकताएँ नामस्थान' पर एक नज़र डालें और ओपी के स्वयं-उत्तर पर मेरी टिप्पणी देखें। बह, मुझे शायद सिर्फ एक उत्तर लिखना चाहिए ... :) –

10

from plyr import count as count ऐसा दिखाई दे सकता:

count <- function(x) { 
    plyr::count(x) 
} 

सरलीकृत:

count <- plyr::count 

अधिक पूरा:

if (requireNamespace("plyr")) 
    count <- plyr::count 

संपादित करें:

मैं @ eipi10 की टिप्पणी से प्रेरित था। मैं ::
के बारे में अनजान था सुझावों के लिए @ जोशुआ उलरिच!

+4

मैं शायद 'गिनती <- plyr :: count' करूँगा, इसलिए मुझे यह सुनिश्चित करने से परेशान नहीं होना पड़ेगा कि मुझे तर्क सही हो। और यदि आप प्लीयर स्थापित नहीं हैं, तो हो सकता है कि आप उस परिभाषा को किसी कथन में लपेटना चाहें: 'अगर (आवश्यकताएँ नामस्थान ("plyr")) <- plyr :: count' की गणना करें। –

1

मैं इस सवाल को एक ही कार्यक्षमता की तलाश में और ऊपर वर्णित दृष्टिकोण का उपयोग करके इस विचार को ठोकर खा गया, इस विचार को सामान्यीकृत करने के लिए एक त्वरित कार्य लिखा। मैं इसे यहां किसी भी व्यक्ति के लिए पोस्ट करना चाहता था जो भविष्य में इस प्रश्न में आया था।

import <- function(pkg, f) { 
    if (pkg %in% installed.packages()) { 
    assign(f, eval(parse(text = paste(pkg, "::", f, sep = ""))), envir = .GlobalEnv) 
    } else { 
    stop(paste(pkg, "is not installed.")) 
    } 
} 
संबंधित मुद्दे