2013-05-08 8 views
7

क्या sqldf क्वेरी से R फ़ंक्शंस को कॉल करने का कोई तरीका है? जैसेsqldf प्रश्नों से कॉल आर फ़ंक्शंस

sqldf("select paste('Hello', 'World')") 

या, sqldf पीछे SQLite इंजन के भीतर कस्टम कार्य या संग्रहित प्रक्रियाओं को परिभाषित करने के लिए एक रास्ता है? (मैं सादे पुराने में स्मृति आर डेटा फ्रेम के साथ sqldf उपयोग कर रहा हूँ, मैं किसी भी वास्तविक डेटाबेस से कनेक्ट करने के लिए नहीं कर रहा हूँ।)

+0

SQLite फ़ंक्शंस में निर्मित के बजाय आप R फ़ंक्शन का उपयोग क्यों करेंगे? – joran

+0

मुझे लगता है कि जवाब बस है, नहीं। – nograpes

+0

जोरन: असल में, विशेष कार्य जिसमें मुझे रूचि है, वह पाचन से पैकेज है() पाचन पैकेज से, MD5 हैश –

उत्तर

12

1) मौजूदा कार्य सबसे पहले यह सुनिश्चित करें कि समारोह आप चाहते हैं पहले से ही उपलब्ध नहीं है। उदाहरण के लिए प्रश्न में कोड सीधे पहले से ही एसक्यूएल में समर्थित है:

> sqldf("select 'Hello' || ' ' || 'world' ") 
    'Hello' || ' ' || 'world' 
1    Hello world 

2) RSQLite.extfuns एक परिभाषित किया गया है एसक्यूएल की SQLite के संस्करण के साथ ही उपयोगकर्ता की एक बड़ी संख्या से सभी एसक्यूएल कार्यों से बाहर काम करता है RSQLite.extfuns पैकेज में बॉक्स (जिसे स्वचालित रूप से sqldf द्वारा लोड किया जाता है)।

3) अन्य Loadable एक्सटेंशन किसी भी मौजूदा SQLite लोड करने योग्य एक्सटेंशन में कार्य SQLite एसक्यूएल समारोह load_extension() के माध्यम से लोड किया जा सकता। जैसे these extensions

4) कस्टम कार्यों कस्टम कार्यों SQLite में जोड़ा जा सकता है, लेकिन वे in C लिखा होना चाहिए देखते हैं।

5) PostgreSQL & sqldf sqldf सिर्फ SQLite नहीं का समर्थन करता है, लेकिन यह भी H2, PostgreSQL और mysql। postgresql इस संबंध में विशेष रूप से शक्तिशाली है। this link from the postgresql documentation देखें Pl/R और R Embedded Postgres package देखें।

6) एच 2 & sqldf एच 2 डेटाबेस sqldf द्वारा समर्थित है। एसक्लाइट एच 2 की तरह आरएच 2 ड्राइवर आर पैकेज में सही शामिल है, इसलिए आपको एक अलग डेटाबेस स्थापित करने की आवश्यकता नहीं है; हालांकि, आपको जावा इंस्टॉल करना होगा। इसमें एक अंतर्निहित SHA256 हैश फ़ंक्शन है (जिसे हैश कहा जाता है)।

7) sqldf & आर एसक्यूएल मिश्रण और आर इस तरह मिलाया जा सकता है: एच 2 पर जोड़ा जानकारी:

library(digest) 
transform(sqldf("select * from BOD"), digest = sapply(demand, digest)) 

8) अन्य इस SO question and answers

अद्यतन देखें।

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