écrire un fichier gzip de trame de données
Je suis en train d'écrire un bloc de données à un fichier gzip, mais d'avoir des problèmes.
Voici mon code exemple:
df1 <- data.frame(id = seq(1,10,1), var1 = runif(10), var2 = runif(10))
gz1 <- gzfile("df1.gz","w" )
writeLines(df1)
Erreur dans
writeLines(df1)
: invalid 'texte' argument
Des suggestions?
EDIT:
un exemple de ligne du personnage, vectoriel, je suis en train d'écrire est:
0 | var1:1.5 var2:.55 var7:1250
La classe label /y-variable est séparé de la x-vars par un " | "et les noms de variables sont séparées les valeurs par" : "et les espaces entre les variables.
EDIT2:
Je m'excuse pour la formulation et la forme de la question, mais voici les résultats:
Ancienne méthode:
system.time(write(out1, file="out1.txt"))
# user system elapsed
# 9.772 17.205 86.860
Nouvelle Méthode:
writeGzFile <- function(){
gz1 = gzfile("df1.gz","w");
write(out1, gz1);
close(gz1)
}
system.time( writeGzFile())
# user system elapsed
# 2.312 0.000 2.478
Merci beaucoup à tous de m'aider à comprendre cela.
Comme c'est souvent demandé sur Rhelp: "Quel problème essayez-vous de résoudre".
Indice: la réponse @DWin commentaire n'est pas "Comment puis-je écrire un bloc de données à un fichier gzip?"
Plus question serait "Est-il plus rapide à écrire .fichier txt ou .fichier gz de R?"
Cela dépend de combien de temps votre morceau de ficelle. En termes informatiques, si votre CPU ou I/O est le goulot d'étranglement. L'écriture d'un gros fichier sur un disque rapide est plus rapide que le calcul d'une forme compressée sur un CPU lent.
J'espérais obtenir une réponse à la question "que peut-il y avoir dans le traitement de la R objet de données d'une manière autre que celui atteint par
Indice: la réponse @DWin commentaire n'est pas "Comment puis-je écrire un bloc de données à un fichier gzip?"
Plus question serait "Est-il plus rapide à écrire .fichier txt ou .fichier gz de R?"
Cela dépend de combien de temps votre morceau de ficelle. En termes informatiques, si votre CPU ou I/O est le goulot d'étranglement. L'écriture d'un gros fichier sur un disque rapide est plus rapide que le calcul d'une forme compressée sur un CPU lent.
J'espérais obtenir une réponse à la question "que peut-il y avoir dans le traitement de la R objet de données d'une manière autre que celui atteint par
save
"? Avez-vous besoin d'être lu par un programme autre que R?
OriginalL'auteur screechOwl | 2013-01-08
Vous devez vous connecter pour publier un commentaire.
writeLines
s'attend à une liste de chaînes de caractères. La façon la plus simple d'écrire ce à un fichier gzip seraitCela permettra d'écrire sous un format csv. Voir aussi
write.table
etwrite.csv2
pour d'autres façons d'écrire le fichier.EDIT:Basé sur la mise à jour de l'article sur le format désiré, j'ai fait l'assistance suivante (rapidement jetés ensemble, probablement admet tonnes de simplification):
La sortie ressemble à
Et tout ce qui est nécessaire est de passer le gzfile à writeLines pour obtenir le résultat souhaité.
writeLines
: stackoverflow.com/a/41215573/3576984OriginalL'auteur user295691
D'écrire quelque chose d'un fichier gzip vous avez besoin de "sérialiser" à texte. Pour R des objets, vous pouvez avoir un coup de couteau à l'aide de
dput
:Cependant, vous avez écrit un texte à la représentation de la trame de données dans le fichier. Ce sera très probablement être moins efficace que l'utilisation de
save(df1,file="df1.RData")
pour l'enregistrer dans un natif R fichier de données. Demandez-vous: pourquoi suis-je l'enregistrer en tant que .fichier gz?Dans un test rapide avec un certains nombres aléatoires, le fichier gz était 54k, l' .RData fichier a été 34k
Donc, juste gzip l' .RData fichier? Non, ça ne marchera pas, parce que gzip compression qui vous dit rien sur le format des données dans le fichier lors de la décompression. C'est un format de fichier CSV, format NetCDF, un fichier au format gzip fichier RData? Vous n'avez pas dit de nous.
Désolé, je suis en l'utilisant comme un fichier d'entrée pour un programme appelé vowpal wabbit. C'est un peu bizarre de délimiter à l'aide de '|', ':' et ' '.
Nous nous rapprochons de la vraie question. Voulez modifier la vôtre-à-dire de plus de ce que vous êtes désireux de le faire? Il semble que la réponse à faire (écrire.csv) pourrait être mieux. Mais c'est une conjecture.
Je suis actuel de l'utilisation de 'écrire(df1, file = "df1.txt")'. Mais c'est prendre un temps pour s'exécuter (C'est ~200k lignes). J'étais curieux de savoir si l'aide .gz serait plus rapide, mais ne pouvait pas obtenir de R à écrire un .fichier gz, qui est la raison de la question.
OriginalL'auteur Spacedman
Un autre moyen très simple de le faire est:
A eu l'idée de: http://blog.revolutionanalytics.com/2009/12/r-tip-save-time-and-space-by-compressing-data-files.html
OriginalL'auteur Gorka
Vous pouvez utiliser le gzip fonction dans R. utils:
OriginalL'auteur user3055034