Rev 15300 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{scan}\title{Read Data Values}\alias{scan}\description{Read data into a vector or list from the console or file.}\usage{scan(file = "", what = double(0), nmax = -1, n = -1, sep = "",quote = if (sep=="\n") "" else "'\"", dec = ".",skip = 0, nlines = 0, na.strings = "NA",flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE,blank.lines.skip = TRUE, multi.line = TRUE)}\arguments{\item{file}{the name of a file to read data values from. If thespecified file is \code{""}, then input is taken from the keyboard(in this case input can be terminated by a blank line).Otherwise, the file name is interpreted \emph{relative} to thecurrent working directory (given by \code{\link{getwd}()}),unless it specifies an \emph{absolute} path.Tilde-expansion is performed where supported.Alternatively, \code{file} can be a \code{\link{connection}}, whichwill be opened if necessary, and if so closed at the end of thefunction call.\code{file} can also be a complete URL.}\item{what}{the type of \code{what} gives the type of data to beread. If \code{what} is a list, it is assumed that the lines of thedata file are records each containing \code{length(what)} items(``fields'').}\item{nmax}{the maximum number of data values to be read, or if\code{what} is a list, the maximum number of records to be read. Ifomitted (and \code{nlines} is not set to a positive value),\code{scan} will read to the end of \code{file}.}\item{n}{the maximum number of data values to be read, defaulting tono limit.}\item{sep}{by default, scan expects to read white-space delimitedinput fields. Alternatively, \code{sep} can be used to specify acharacter which delimits fields. A field is always delimited by anewline unless it is quoted.}\item{quote}{the set of quoting characters as a single characterstring.}\item{dec}{decimal point character.}\item{skip}{the number of lines of the input file to skip beforebeginning to read data values.}\item{nlines}{the maximum number of lines of data to be read.}\item{na.strings}{character vector. Elements of this vector are to beinterpeted as missing (\code{\link{NA}}) values.}\item{flush}{logical: if \code{TRUE}, \code{scan} will flush to theend of the line after reading the last of the fields requested.This allows putting comments after the last field, but precludesputting more that one record on a line.}\item{fill}{logical: if \code{TRUE}, \code{scan} will implicitly addempty fields to any lines with fewer fields than implied by\code{what}.}\item{strip.white}{vector of logical value(s) corresponding to itemsin the \code{what} argument. It is used only when \code{sep} hasbeen specified, and allows the stripping of leading and trailingwhite space from \code{character} fields (\code{numeric} fieldsare always stripped).If \code{strip.white} is of length 1, it applies to all fields;otherwise, if \code{strip.white[i]} is \code{TRUE} \emph{and} the\code{i}-th field is of mode character (because \code{what[i]} is)then the leading and trailing white space from field \code{i} isstripped.}\item{quiet}{logical: if \code{FALSE} (default), scan() will print aline, saying how many items have been read.}\item{blank.lines.skip}{logical: if \code{TRUE} blank lines in theinput are ignored, except when counting \code{nlines}.}\item{multi.line}{logical. Only used if \code{what} is a list.If \code{FALSE}, all of a record must appear on one line (but morethan one record can appear on a single line). Note that using\code{fill = TRUE} implies that a record will terminated at the endof a line.}}\details{The value of \code{what} can be a list of types, in which case\code{scan} returns a list of vectors with the types given by thetypes of the elements in \code{what}. This provides a way of readingcolumnar data.Empty numeric fields are always regarded as missing values.Empty character fields are scanned as empty character vectors, unless\code{na.strings} contains \code{""} when they are regarded as missingvalues.If \code{sep} is the default (\code{""}), the character \code{\\}in a quoted string escapes the following character, so quotes mayincluded in the string by escaping them.If \code{sep} is non-default, the fields may be quoted in the style of\file{.csv} files where separators inside quotes (\code{''} or\code{""}) are ignored and quotes may be put inside strings bydoubling them. However, if \code{sep = "\n"} it is assumedby default that one wants to read entire lines verbatim.Note that since \code{sep} is a separator and not a terminator,reading a file by \code{scan("foo", sep="\n", blank.lines.skip=FALSE)}will give an empty file line if the file ends in a linefeed and not itit does not. This might not be what you expected; see also\code{\link{readLines}}.}\note{The default for \code{multi.line} differs from S. To read one recordper line, use \code{flush = TRUE} and \code{multi.line = FALSE}.If number of items is not specified, the internalmechanism re-allocates memory in powers of two and so could use upto three times as much memory as needed. (It needs both old and newcopies.) If you can, specify either \code{n} or \code{nmax} wheneverinputting a large vector, and \code{nmax} or \code{nlines} wheninputting a large list.}\seealso{\code{\link{read.table}} for more user-friendly reading of datamatrices;\code{\link{readLines}} to read a file a line at a time.\code{\link{write}}.}\examples{cat("TITLE extra line", "2 3 5 7", "11 13 17", file="ex.data", sep="\n")pp <- scan("ex.data", skip = 1, quiet= TRUE)scan("ex.data", skip = 1)scan("ex.data", skip = 1, nlines=1)# only 1 line after the skipped onestr(scan("ex.data", what = list("","",""))) # flush is F -> read "7"str(scan("ex.data", what = list("","",""), flush = TRUE))unlink("ex.data") # tidy up}\keyword{file}\keyword{connection}