la lecture d'un fichier texte dans R, ligne par ligne
Je voudrais lire un fichier texte dans R, ligne par ligne, à l'aide d'une boucle for, et de la longueur du fichier. Le problème est qu'il n'imprime que les personnage(0). C'est le code:
fileName="up_down.txt"
con=file(fileName,open="r")
line=readLines(con)
long=length(line)
for (i in 1:long){
linn=readLines(con,1)
print(linn)
}
close(con)
- Le problème, c'est que vous avez lu l'intégralité du fichier (
line=readLines(con)
) et puis vous continuez la lecture, le fichier à l'intérieur de la boucle; au point, il n'y a plus rien à lire. - Si vous êtes à la recherche d'un moyen de charger qu'une seule ligne à la fois à partir d'un (peut-être gros) fichier, que la actuellement accepté de répondre n'est pas la résolution de votre problème. Si, au lieu de cela, vous voulez juste de traiter le contenu d'un fichier ligne par ligne, indépendamment de la façon dont vous le chargez, peut-être que la question devrait être mieux formulé.
Vous devez vous connecter pour publier un commentaire.
Vous devez prendre soin avec
readLines(...)
et de gros fichiers. La lecture de toutes les lignes à la mémoire peut être risqué. Ci-dessous est un exemple de la façon de lire le fichier et de processus juste une ligne à l'instant:Comprendre le risque de lire une ligne à la mémoire trop. Les gros fichiers, sans saut de ligne, remplissez votre mémoire aussi.
Suffit d'utiliser
readLines
sur votre fichier:Il y a tout un manuel consacré à ce...
readLines
fonctionne vraiment le plus simple, même avec un code simple commefn <- readLines("fn.txt")
!Voici la solution avec un
for
boucle. Surtout, il prend le un appel àreadLines
de la boucle de sorte qu'il n'est pas appelé improprement encore et encore. Ici, il est:print(linn)
suffit.J'écris un code pour lire le fichier ligne par ligne pour répondre à ma demande qui de ligne différents ont différents type de données de suivi des articles: lire en ligne-par-ligne-de-un-fichier-dans-r et la détermination-nombre-de-linesrecords. Et il devrait y avoir une meilleure solution pour les gros fichier, je pense. Ma version R (3.3.2).
Je vous suggère de vérifier
bloc
etdisque.image
. Ils ont tous les deux fonctions de la lecture dans CSVs morceau par morceau.En particulier,
disk.frame::csv_to_disk.frame
peut être la fonction, vous êtes après?disk.frame
ressemble beaucoup et il inclut le support pour deux de mes préférés de paquets -data.table
etfst
qui sont parmi les plus efficaces de leur genre. Vous pouvez gentiment signaler en outre de la documentation et des exemples dedisk.frame
autres que ce qui est disponible dans la page github.disk.frame
peut être une alternative àMonetDbLite
. J'espère qu'il fait à CRAN tôt.