Supposons avoir une liste de livres avec les auteurs, après avoir lu les données dans une liste "LS", j'ai essayé de la saisir dans un fichier et le résultat était
> 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'
J'ai pu utiliser dput mais je voudrais que les données soient bien formatées (pas de redondance des mots-clés répétés dans tout le fichier). Des suggestions? Merci
UPDATE dput (tête (LS, 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")))
Vous pouvez d’abord convertir votre liste en un cadre de données:
LS.df = as.data.frame(do.call(rbind, LS))
Ou
LS.df = as.data.frame(do.call(cbind, LS))
Ensuite, vous pouvez simplement sauvegarder LS.df avec write.csv ou write.table
Utilisation des données que vous avez fournies et rjson
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
Le fichier ressemble à
[{"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"}]}
]
J'utilise le package RJSONIO.
library(RJSONIO)
exportJSON <- toJSON(LS)
write(exportJSON,"LS.json")
Il vaut mieux utiliser format ()
LS.str <- format(LS)