मैं jsonlite का उपयोग कर रहा हूं और मैं simplifyDataFrame fromJSON() फ़ंक्शन में तर्क करता था। क्या mongolite पैकेज में ऐसा ही कुछ है? उदाहरण के लिए handler तर्क का उपयोग करना? मुझे इस पद्धति के लिए पर्याप्त दस्तावेज नहीं मिले हैं।

मेरे पास इसी तरह के रिकॉर्ड हैं

json <- '{"list": [{"x": 1, "y": "a"},{"x": 2, "y": "b"}],"numeric": 1.2}'

जब मैं find() फ़ंक्शन का उपयोग करके रिकॉर्ड लोड करता हूं तो यह दो कॉलम के साथ डेटा फ्रेम बनाता है। पहले कॉलम में तत्वों के रूप में संपूर्ण डेटा फ़्रेम होते हैं।

df <- m$find()
df$list[[1]]
#   x y
# 1 1 a
# 2 2 b

मैं जो चाहता हूं वह कुछ ऐसा है

json %>% fromJSON(simplifyDataFrame = F) %>% as.data.frame.list
#   list.x list.y list.x.1 list.y.1 numeric
# 1      1      a        1        a     1.2

क्या इसका कोई समाधान है?


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

मुझे पता है कि डेटा फ्रेम को सूची में बदलने के लिए मैं इसे लूप में कर सकता हूं। या डेटा को JSON फॉर्मेट में बदलें और फिर fromJSON(simplifyDataFrame = F) का उपयोग करें। मेरे द्वारा उपयोग किए जाने वाले डेटा के आकार के लिए दोनों विधियां बहुत धीमी हैं। मेरा पिछला प्रश्न देखें।

1
Jan Kislinger 24 सितंबर 2016, 10:14

1 उत्तर

सबसे बढ़िया उत्तर

m$find() के बजाय m$iterate()$batch() का उपयोग करने का प्रयास करें। यह वह आउटपुट देता है जिसकी आप अपेक्षा करते हैं।

json <- '{"list": [{"x": 1, "y": "a"},{"x": 2, "y": "b"}],"numeric": 1.2}'
json %>% fromJSON(simplifyDataFrame = F) %>% as.data.frame.list
  list.x list.y list.x.1 list.y.1 numeric
1      1      a        2        b     1.2
catch <- m$insert(json)
m$iterate()$batch() %>% as.data.frame.list
  list.x list.y list.x.1 list.y.1 numeric
1      1      a        2        b     1.2
4
SymbolixAU 18 अक्टूबर 2016, 04:40