2012-08-16 9 views
15

(करके वस्तु-संबंधपरक मानचित्रण, मेरा मतलब है कि यहाँ क्या वर्णन किया गया है:। Wikipedia: Object-relational mapping)क्या आर में ऑब्जेक्ट-रिलेशनल मैपिंग के लिए कोई पैकेज है?

यहाँ कैसे मैं आर में इस काम कल्पना कर सकता है: "आभासी डेटा फ्रेम" का एक प्रकार एक डेटाबेस से जुड़ा हुआ है, और रिटर्न एक्सेस किए जाने पर SQL क्वेरी के परिणाम। उदाहरण के लिए, head(virtual_list) वास्तव में मैप किए गए डेटाबेस पर (select * from mapped_table limit 5) के परिणाम लौटाएगा।

मुझे यह post by John Myles White मिला है, लेकिन पिछले 3 वर्षों में कोई प्रगति नहीं हुई है।

क्या कोई ऐसा काम करने वाला पैकेज है जो इसे लागू करता है?

यदि नहीं, तो

  1. यह उपयोगी हो सकते हैं?
  2. इसे लागू करने का सबसे अच्छा तरीका क्या होगा (एस 4?)?
+0

ओरेकल में ऐसा उत्पाद है जो आर में करता है ... –

उत्तर

10

हालिया पैकेज dplyr यह लागू कर रहा है (अन्य अद्भुत सुविधाओं के साथ)।

यहाँ समारोह src_mysql() के उदाहरण से चित्र हैं:

# Connection basics --------------------------------------------------------- 
# To connect to a database first create a src: 
my_db <- src_mysql(host = "blah.com", user = "hadley", 
    password = "pass") 
# Then reference a tbl within that src 
my_tbl <- tbl(my_db, "my_table") 

# Methods ------------------------------------------------------------------- 
batting <- tbl(lahman_mysql(), "Batting") 
dim(batting) 
colnames(batting) 
head(batting) 
2

जॉन मायल्स व्हाइट की तरह दिखता है कि वह इसे छोड़ दिया गया है।

here समझाया गया एक वर्कअराउंड है।

7

एक पुराना असमर्थित पैकेज, SQLiteDF है, जो ऐसा करता है। इसे स्रोत से बनाएं और कई त्रुटि संदेशों को अनदेखा करें।

> # from example(sqlite.data.frame) 
> 
> library(SQLiteDF) 
> iris.sdf <- sqlite.data.frame(iris) 
> iris.sdf$Petal.Length[1:10] # $ done via SQL 
[1] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 
1

मुझे नहीं लगता कि यह उपयोगी होगा। आर असली ओओपी भाषा नहीं है। आर में "केंद्रीय" डेटा संरचना डेटा फ्रेम है।

dbGetQuery एक डेटा फ्रेम में एक प्रश्न के परिणाम दिखाने के लिए: वस्तु संबंधपरक मानचित्रण यहाँ के लिए कोई ज़रूरत नहीं आप चाहते हैं एसक्यूएल तालिकाओं और डेटा फ्रेम और RMySQL और RODBC के बीच एक मैपिंग सिर्फ इतना है कि प्रदान करना है और dbWriteTable किसी तालिका में डेटा डालने या थोक अद्यतन (डेटा फ्रेम से) करने के लिए।

+0

क्या आर 6 क्लास पता ओओपी पर्याप्त नहीं था? – jangorecki

+0

मैं इस दृष्टिकोण से असहमत हूं: किसी भी उपयोगी भाषा का कोई भी उपयोगी भाषा "पूरी तरह से" नहीं है। आर एक कार्यात्मक भाषा होने का दावा करता है, लेकिन यह कई साइड इफेक्ट्स के लिए भी अनुमति देता है। आर को ओआरएम बनाने का साधन होना चाहिए, और मुझे खुशी है कि 'dplyr' कदम बढ़ाया गया है। –

0

एक अनुभवी आर उपयोगकर्ता के रूप में, मैं इसका उपयोग नहीं करता। सबसे पहले, यह 'वर्चुअल फ्रेम' उपयोग करने में धीमा होगा, क्योंकि आपको लगातार आर मेमोरी और डेटाबेस के बीच सिंक्रनाइज़ करने की आवश्यकता होती है। इसे डेटाबेस तालिका को लॉक करने की भी आवश्यकता होगी, अन्यथा आपके पास एक ही समय में होने वाले अन्य संपादनों के कारण अप्रत्याशित परिणाम हैं।

अंत में, मुझे नहीं लगता कि आर promise ऑब्जेक्ट्स के एक अलग मूल्यांकन को लागू करने के लिए उपयुक्त है। myFrame$foo[ myFrame$foo > 40 ] करना अभी भी पूर्ण foo कॉलम लाएगा, क्योंकि आप आर से एसक्यूएल तक पूर्ण अनुवाद योजना को लागू नहीं कर सकते हैं।

इसलिए, मैं एक क्वेरी से डेटाफ्रेम() लोड करना पसंद करता हूं, इसका उपयोग करता हूं, और यदि आवश्यक हो तो इसे डेटाबेस में वापस लिखना पसंद करता हूं।

+0

आपके उत्तर के लिए धन्यवाद। मैं स्मृति और लॉकिंग से सहमत हूं। यह परियोजना के आधार पर एक समस्या हो सकती है। रेखा चयन के उदाहरण के बारे में: एक पूर्ण अनुवाद योजना संभव नहीं हो सकती है, लेकिन कम से कम बहुत से सामान्य जोड़ों को व्यवहार्य होना चाहिए (उदाहरण में लाइन चयन उदाहरण के लिए तुच्छ होगा) ... – nassimhddd

+0

रेखा चयन उदाहरण है आपके लिए तुच्छ आइए इसे आगे बढ़ाएं: शीर्ष 10% प्रतिशत? यादृच्छिक एन = 100 नमूनाकरण? आदि ... अभ्यास में, इसकी सीमाएं बहुत जल्दी पहुंच गई हैं। – parasietje

1

डीबीएस (DBI, RODBC, RJDBC, RMySql, क्वेरी करने के लिए विभिन्न ड्राइवर संकुल के बगल में ...) और dplyr, वहाँ भी है https://cran.r-project.org/web/packages/sqldf/

यह sqldf स्वचालित रूप से डाटाबेस & में dataframes आयात करेगा आप एसक्यूएल के माध्यम से डेटा को क्वेरी करते हैं। अंत में डीबी हटा दिया जाता है।

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