2012-10-03 13 views
11

लेखकों वाली पुस्तकों की एक सूची है, मान लें एक सूची उत्पादन के लिए "लोकसभा" मैं एक फ़ाइल में घुसने की कोशिश की है और उत्पादनकैसे आर में फाइल करने के लिए एक सूची में डेटा को पढ़ने के बाद

> write.table(LS, "output.txt") 
Error in data.frame(..., title = NULL, : 
    arguments imply differing number of rows: 1, 0 

> write(LS, "output.txt") 
Error in cat(list(...), file, sep, fill, labels, append) : 
    argument 1 (type 'list') cannot be handled by 'cat' 

था मैं डंप का उपयोग करने में सक्षम था लेकिन मैं डेटा को अच्छी तरह से स्वरूपित करना चाहता हूं (फाइल पर दोहराए गए कीवर्ड की कोई अनावश्यकता नहीं)। कोई सुझाव? धन्यवाद

अद्यतन dput (सिर (एल एस, 2))

list(structure(list(title = "Book 1", 
authors = list(structure(c("Pooja", "Garg"), 
.Names = c("forename","surname")), 
structure(c("Renu", "Rastogi"), 
.Names = c("forename","surname")))), 
.Names = c("title", "authors")), 

structure(list(title = "Book 2", 
authors = list(structure(c("Barry", "Smit"), .Names = c("forename", 
    "surname")), structure(c("Tom", "Johnston"), .Names = c("forename", 
    "surname")))), .Names = c("title", "authors"))) 
+1

मुझे लगता है कि तुम क्यों आपको नहीं लगता dput के उत्पादन में स्वीकार्य है पर टिप्पणी करने की आवश्यकता होगी। आपका अपेक्षित/वांछित आउटपुट क्या है? – Dason

+0

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

+0

कुछ उदाहरण डेटा रखने से मदद मिलेगी (प्रश्न के भीतर 'डिप (हेड (एलएस, 2))' के बारे में कैसे हम डेटा – mnel

उत्तर

9

आपको सबसे पहले एक डेटा फ्रेम करने के लिए अपनी सूची में परिवर्तित हो सकता है:

LS.df = as.data.frame(do.call(rbind, LS)) 

या

LS.df = as.data.frame(do.call(cbind, LS)) 

फिर आप बस sav sav write.csv या write.table

8

डेटा आपके द्वारा दी गई और rjson का उपयोग के साथ ई LS.df

library(rjson) 

# write them to a file 
cat(toJSON(LS), file = 'LS.json') 


LS2 <- fromJSON('LS.json') 


# some rearranging to get authors back to being a data.frame 

LS3 <- lapply(LS2, function(x) { x[['authors']] <- lapply(x[['authors']], unlist); x}) 

identical(LS, LS3) 

## TRUE 

फ़ाइल लग रहा है

[{"title":"Book 1","authors":[{"forename":"Pooja","surname":"Garg"},{"forename":"Renu","surname":"Rastogi"}]},{"title":"Book 2","authors":[{"forename":"Barry","surname":"Smit"},{"forename":"Tom","surname":"Johnston"}]}] 

की तरह आप एक अलग लाइन पर प्रत्येक पुस्तक चाहते हैं तो आप

.json <- lapply(LS, toJSON) 
# add new lines and braces 

.json2 <- paste0('[\n', paste0(.json, collapse = ', \n'), '\n]') 
cat(.json) 
[ 
{"title":"Book 1","authors":[{"forename":"Pooja","surname":"Garg"},{"forename":"Renu","surname":"Rastogi"}]}, 
{"title":"Book 2","authors":[{"forename":"Barry","surname":"Smit"},{"forename":"Tom","surname":"Johnston"}]} 
] 
+0

मैं –

+0

से ऊपर की संरचना जोड़ता हूं और अब मैंने प्रतिक्रिया संपादित की है इस संरचना के साथ काम करने के लिए – mnel

+0

समाधान के लिए धन्यवाद लेकिन डेटा फ्रेम मेरे लिए आसान था –

2

मैं RJSONIO पैकेज का उपयोग कर सकता हूं।

library(RJSONIO) 

exportJSON <- toJSON(LS) 
write(exportJSON,"LS.json") 
0

यह प्रारूप उपयोग करना बेहतर है()

LS.str <- format(LS)

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