[R] [newbie] read row from file into vector

William Dunlap wdunlap at tibco.com
Thu Dec 29 22:49:13 CET 2011


Look into connection objects, which let you open a file or other
readable sort of thing and read it piece by piece.  E.g., the
following function opens your file (making a "file connection"),
skips some lines, reads the desired line into a character object,
then reads from that character object (as a "text connection")
to make a numeric object:

f <- function (fileName, lineNumber, ...) 
{
    connection <- file(fileName, "rt")
    on.exit(close(connection))
    if (lineNumber > 1) {
        readLines(connection, n = lineNumber - 1)
    }
    lineText <- readLines(connection, n = 1)
    scan(textConnection(lineText), ...)
}

Here is a self-contained example:

> tfile <- tempfile()
> cat(file=tfile, sep="\n", "A data file with a header line",
+     "101;102;103", "104,105", "106/107/108")
> cat(readLines(tfile), sep="\n") # look at text in file
A data file with a header line
101;102;103
104,105
106/107/108
> f(tfile, lineNumber=3, sep=",") # read third line as comma separated numbers
Read 2 items
[1] 104 105

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com 

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Tom Roche
> Sent: Thursday, December 29, 2011 12:51 PM
> To: r-help at r-project.org
> Subject: [R] [newbie] read row from file into vector
> 
> 
> summary: how to read a row (not column) from a file into a vector (not a data frame)?
> 
> details:
> 
> I'm using
> 
> $ lsb_release -ds
> Linux Mint Debian Edition
> $ uname -rv
> 3.0.0-1-amd64 #1 SMP Sun Jul 24 02:24:44 UTC 2011
> $ R --version
> R version 2.14.1 (2011-12-22)
> 
> I'm new to R (having previously used it only for graphics), but have worked in many other languages.
> I've got a CSV file from which I'd like to read the values from a single *row* into a vector. E.g.,
> for a file such that
> 
> $ head -n 2 ~/data/foo.csv | tail -n 1
> 5718,0.3,0.47,0,0,0,0,0,0,0,0,0.08,0.37,0,0,0.83,1.55,0,0,0,0,0,0,0,0,0,0.00,2.48,2.33,0.17,0,0,0,0,0,
> 0,0.00,10.69,0.18,0,0,0,0
> 
> I'd like to be able to populate a vector 'v' s.t. v[1]=5718, ... v[43]=0
> 
> I can't seem to do that with, e.g., read.csv(...) or scan(...), both of which seem column-oriented.
> What am I missing?
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list