2015-10-09 13 views
5

पर निर्भर करता है मुझे एक आर पैकेज बनाना है जो पैकेज डेटा.table पर निर्भर करता है। हालांकि, अगर मैं इस तरह के पैकेज में अगले एक के रूप में एक समारोह करना होगाआर में एक पैकेज बनाना जो डेटा.table

randomdt <- function(){ 
    dt <- data.table(random = rnorm(10)) 
    dt[dt$random > 0] 
} 

समारोह [ data.table के लिए नहीं data.frame के लिए विधि और इसलिए त्रुटि का उपयोग करेगा

Error in `[.data.frame`(x, i) : undefined columns selected 

दिखाई देगा। आमतौर पर इसे get('[.data.table') या इसी तरह की विधि (package::function सरलतम) का उपयोग करके हल किया जाएगा, लेकिन ऐसा लगता है कि यह काम नहीं करता है। आखिरकार, [ एक आदिम कार्य है और मुझे नहीं पता कि यह कैसे काम करता है।

तो, मैं अपने पैकेज से डेटा.table [ फ़ंक्शन कैसे कॉल कर सकता हूं?

+0

आपको शायद यह सुनिश्चित करना होगा कि आपका पैकेज लोड होने पर 'data.table' लोड हो। – Jaap

+2

अपनी 'विवरण' फ़ाइल में 'निर्भर करता है: डेटा.table' जोड़ें। – Soheil

+4

क्या आपने पढ़ा है [एफएक्यू 6.9] (https://cran.r-project.org/web/packages/data.table/vignettes/datatable-faq.pdf)? – Arun

उत्तर

5

MichaelChirico से कुछ प्रतिक्रियाओं के आधार पर अपडेट किया गया और Arun और Soheil द्वारा टिप्पणियों के आधार पर अपडेट किया गया।

काफी बोलते हुए, दो दृष्टिकोण हैं जिन पर आप विचार कर सकते हैं। पहला आपके पैकेज में निर्भरता का निर्माण कर रहा है, जबकि दूसरा आपके आर कोड में लाइनों को शामिल करता है जो data.table की उपस्थिति के लिए परीक्षण करते हैं (और संभवतः इसे स्वचालित रूप से इंस्टॉल भी नहीं किया जाता है)।

data.tableFAQ विशेष रूप से 6.9 में इस पते, और कहा गया है कि आप सुनिश्चित कर सकते हैं कि कि data.table उचित रूप से अपने पैकेज का द्वारा लोड किया जाता है:

या तो i) निर्भर करता है में data.table में शामिल हैं: अपने विवरण के क्षेत्र फ़ाइल, या ii) आयात में डेटा.table शामिल करें: अपनी DESCRIPTION फ़ाइल का फ़ील्ड और अपनी NAMESPACE फ़ाइल में आयात (डेटा.table)।

टिप्पणियों में उल्लेख किया गया है, यह आम आर व्यवहार है जो कई पैकेजों में है।

एक वैकल्पिक तरीका कोड की विशिष्ट पंक्तियां बनाना है जो आपके कोड के हिस्से के रूप में आवश्यक पैकेजों का परीक्षण और आयात करते हैं। यह है, मैं उपरोक्त विकल्प का उपयोग करने के लालित्य को आदर्श समाधान नहीं दूंगा। हालांकि, यह तकनीकी रूप से संभव है।

ऐसा करने का एक आसान तरीका require या library का उपयोग data.table के अस्तित्व की जांच के लिए किया जाएगा, अगर इसे संलग्न नहीं किया जा सकता है तो एक त्रुटि फेंक दी जाएगी। install.packages चलाने के लिए आप सशर्त बयान के एक साधारण सेट का उपयोग भी कर सकते हैं ताकि उन्हें लोड करने में आपको आवश्यकता हो।

Yihui (knitr फेम) झी library और requirehere के बीच अंतर के बारे में बहुत पद है और सिर्फ उन मामलों में जहां पैकेज आगामी कोड के लिए नितांत आवश्यक है में library प्रयोग करने के लिए एक मजबूत मामला बनाता है।

+1

डाउनवोट क्यों? उत्तर में सुधार कैसे करें, इस पर टिप्पणी करें? – TARehman

+0

@MichaelChirico सुझावों का एक उचित सेट। मैंने इस पर विस्तार करने और अरुण और सोहेल द्वारा वर्णित कुछ वस्तुओं को जोड़ने का प्रयास किया है। यदि आपके पास कोई अतिरिक्त सुझाव है, तो मुझे आगे संशोधित करने में खुशी होगी। – TARehman

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