2012-05-08 16 views
11

यदि मुझे एक पैकेज के अंदर एक फ़ंक्शन (एक लुकअप टेबल के रूप में) के अंदर डेटा सेट का उपयोग करने की आवश्यकता है, तो क्या मैं काम कर रहा हूं, मुझे फ़ंक्शन के अंदर डेटा सेट को स्पष्ट रूप से लोड करने की आवश्यकता है?एक फ़ंक्शन के अंदर डेटा (पैकेज निर्माण)

फ़ंक्शन और डेटा सेट मेरे पैकेज का हिस्सा हैं।

यह है कि डेटा समारोह के अंदर सेट का उपयोग करने के सही तरीका है:

foo <- function(x){ 
    x <- dataset_in_question 
} 

या इस बेहतर है:

foo <- function(x){ 
    x <- data(dataset_in_question) 
} 

या वहाँ कुछ दृष्टिकोण मुझे लगता है कि के बारे में सोच नहीं कर रहा हूँ है सही है ?

+0

एमएचएच ... मैं इसके बजाय फ़ंक्शन में लागू फ़ंक्शंस का उपयोग करता हूं और डेटा सेट पर फ़ंक्शन का उपयोग करता हूं, लेकिन शायद यह इस मामले में कोई विकल्प नहीं है ... – Mikko

+0

मुझे लगभग निश्चित है कि यह विकल्प है (1) । AFAIK, आप इसके साइड इफेक्ट्स के लिए 'डेटा() 'का उपयोग करते हैं, न कि इसके रिटर्न वैल्यू। वास्तव में, 'डेटा()' का वापसी मूल्य केवल डेटासेट का नाम है, वास्तविक चर नहीं। उदाहरण के लिए, 'x <- डेटा (आईरिस)' आज़माएं और देखें कि क्या होता है। – Andrie

+0

यदि आप केवल एक तालिका के रूप में डेटासेट का उपयोग कर रहे हैं और इसे बदल नहीं रहे हैं, तो क्या एक नई समान वस्तु बनाने की आवश्यकता है? यदि आवश्यकता है, तो आप तालिका को अपने फ़ंक्शन ('x = dataset_in_question') के औपचारिक तर्क के रूप में जोड़ने पर विचार कर सकते हैं। – BenBarnes

उत्तर

1

एक बस डेटा के रूप में आर फ़ोल्डर में एक .rda फ़ाइल के रूप में स्थापित जगह कर सकते हैं हैडली द्वारा वर्णित: http://r-pkgs.had.co.nz/data.html#data-sysdata

मैथ्यू जोकर syuzhet pa में इस दृष्टिकोण का उपयोग करते हैं bing डेटा सेट सहित डेटा सेट के लिए ckage पर ~ लाइन 452 यहाँ देखा के रूप में: syuzhet:::bing

अनिवार्य रूप से, आदेश devtools::use_data(..., internal = TRUE) सेट हो जाएगा: https://github.com/mjockers/syuzhet/blob/master/R/syuzhet.R

bing उपयोगकर्ता के लिए उपलब्ध नहीं है, लेकिन पैकेज करने के लिए है के रूप में द्वारा प्रदर्शन जिस तरह से इसकी जरूरत है सब कुछ ऊपर।

+0

use_data अब – jzadra

+1

@jzadra को बहिष्कृत नहीं किया गया है, कोई भी बड़ी ** ** usethis ** पैकेज में 'usethis :: use_data' के रूप में स्थानांतरित नहीं किया गया है –

11

इस विषय के बारे में recent discussion आर-devel पर (पैकेज विकास के संदर्भ में) था, जिनमें से कई अंक इस सवाल के लिए प्रासंगिक हैं:

  1. अगर केवल विकल्प उपलब्ध कराने के लिए लागू होते हैं अपने उदाहरण आर खुद (यानी, Brian Ripley) आपको बताता है क्या करने के लिए:

    foo <- function(x){ 
        data("dataset_in_question") 
    } 
    
  2. यह दृष्टिकोण हालांकि आर अध्यक्ष एवं प्रबंध निदेशक की जांच में एक नोट जो आर (या वर्तमान में आर devel) के आगामी संस्करणों में उपयोग करके बचा जा सकता है फेंक होगा टी वह globalVariables() समारोह, added by John Chambers

  3. 'सही' दृष्टिकोण है (यानी, Brian Ripley और Peter Dalgaard द्वारा की वकालत एक) अपने पैकेज के लिए LazyData विकल्प का उपयोग करना होगा। this section of "Writing R Extensions" देखें।

बीटीडब्ल्यू: मैं पूरी तरह से समझ नहीं पा रहा हूं कि आपका पहला दृष्टिकोण कैसे काम करना चाहिए। x <- dataset_in_question क्या करना चाहिए? dataset_in_question एक वैश्विक वैरिएबल या पहले परिभाषित किया गया है?

1

मेरे लिए यह DESCRIPTION फ़ाइल में LazyData: true को अतिरिक्त get() उपयोग करने के लिए (@Henrik बिंदु 3 से postig देखें) नोट no visible binding for global variable ... से छुटकारा पाने के लिए ज़रूरी था। मेरा आर संस्करण 3.2.3 है।

foo <- function(x){ 
    get("dataset_in_question") 
} 

तो LazyData (data("dataset_in_question", envir = environment()) का उपयोग किए बिना) dataset_in_question सीधे सुलभ बना देता है और get() को पूरा करने के R CMD check

HTH है

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