leyendo un archivo de texto en R línea por línea

Me gustaría leer un archivo de texto en R, línea por línea, usando un ciclo for y con la longitud del archivo. El problema es que solo imprime el carácter (0). Este es el código:

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) 

Debe tener cuidado con readLines(...) y archivos grandes. Leer todas las líneas en la memoria puede ser riesgoso. A continuación se muestra un ejemplo de cómo leer un archivo y procesar solo una línea a la vez:

 processFile = function(filepath) { con = file(filepath, "r") while ( TRUE ) { line = readLines(con, n = 1) if ( length(line) == 0 ) { break } print(line) } close(con) } 

Comprenda el riesgo de leer una línea en la memoria también. Los archivos grandes sin saltos de línea también pueden llenar tu memoria.

Solo use readLines en su archivo:

 R> res <- readLines(system.file("DESCRIPTION", package="MASS")) R> length(res) [1] 27 R> res [1] "Package: MASS" [2] "Priority: recommended" [3] "Version: 7.3-18" [4] "Date: 2012-05-28" [5] "Revision: $Rev: 3167 $" [6] "Depends: R (>= 2.14.0), grDevices, graphics, stats, utils" [7] "Suggests: lattice, nlme, nnet, survival" [8] "Authors@R: c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\")," [9] " email = \"ripley@stats.ox.ac.uk\"), person(\"Kurt\", \"Hornik\", role" [10] " = \"trl\", comment = \"partial port ca 1998\"), person(\"Albrecht\"," [11] " \"Gebhardt\", role = \"trl\", comment = \"partial port ca 1998\")," [12] " person(\"David\", \"Firth\", role = \"ctb\"))" [13] "Description: Functions and datasets to support Venables and Ripley," [14] " 'Modern Applied Statistics with S' (4th edition, 2002)." [15] "Title: Support Functions and Datasets for Venables and Ripley's MASS" [16] "License: GPL-2 | GPL-3" [17] "URL: http://www.stats.ox.ac.uk/pub/MASS4/" [18] "LazyData: yes" [19] "Packaged: 2012-05-28 08:47:38 UTC; ripley" [20] "Author: Brian Ripley [aut, cre, cph], Kurt Hornik [trl] (partial port" [21] " ca 1998), Albrecht Gebhardt [trl] (partial port ca 1998), David" [22] " Firth [ctb]" [23] "Maintainer: Brian Ripley " [24] "Repository: CRAN" [25] "Date/Publication: 2012-05-28 08:53:03" [26] "Built: R 2.15.1; x86_64-pc-mingw32; 2012-06-22 14:16:09 UTC; windows" [27] "Archs: i386, x64" R> 

Hay un manual completo dedicado a esto …

Aquí está la solución con un bucle for . Es importante destacar que se necesita una llamada para readLines fuera del bucle for para que no se llame incorrectamente una y otra vez. Aquí está:

 fileName <- "up_down.txt" conn <- file(fileName,open="r") linn <-readLines(conn) for (i in 1:length(linn)){ print(linn[i]) } close(conn) 

Escribo un código para leer el archivo línea por línea para satisfacer mi demanda, que línea diferente tiene diferentes tipos de datos para seguir artículos: leer-línea-por-línea-de-un-archivo-en-r y determinar-número-de-registros-líneas . Y debería ser una mejor solución para archivos grandes, creo. Mi versión R (3.3.2).

 con = file("pathtotargetfile", "r") readsizeof<-2 # read size for one step to caculate number of lines in file nooflines<-0 # number of lines while((linesread<-length(readLines(con,readsizeof)))>0) # calculate number of lines. Also a better solution for big file nooflines<-nooflines+linesread con = file("pathtotargetfile", "r") # open file again to variable con, since the cursor have went to the end of the file after caculating number of lines typelist = list(0,'c',0,'c',0,0,'c',0) # a list to specific the lines data type, which means the first line has same type with 0 (eg numeric)and second line has same type with 'c' (eg character). This meet my demand. for(i in 1:nooflines) { tmp <- scan(file=con, nlines=1, what=typelist[[i]], quiet=TRUE) print(is.vector(tmp)) print(tmp) } close(con)