Rev 88893 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/scan.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2023 R Core Team% Distributed under GPL 2 or later\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(), nmax = -1, n = -1, sep = "",quote = if(identical(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,comment.char = "", allowEscapes = FALSE,fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)}\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(or whatever \code{\link{stdin}()} reads if input is redirected or\R is embedded).(In this case input can be terminated by a blank line or an \abbr{EOF}signal, \samp{Ctrl-D} on Unix and \samp{Ctrl-Z} on Windows.)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.When running \R from a script, \code{file = "stdin"} can be used torefer to the process's \code{stdin} file stream.This can be a compressed file (see \code{\link{file}}).Alternatively, \code{file} can be a \code{\link{connection}},which will be opened if necessary, and if so closed at the end ofthe function call. Whatever mode the connection is opened in,any of \abbr{LF}, \abbr{CRLF} or \abbr{CR} will be accepted as the\abbr{EOL} marker for a line and so will match \code{sep = "\n"}.\code{file} can also be a complete URL. (For the supported URLschemes, see the \sQuote{URLs} section of the help for\code{\link{url}}.)To read a data file not in the current encoding (for example aLatin-1 file in a UTF-8 locale or conversely) use a\code{\link{file}} connection setting its \code{encoding} argument(or \code{scan}'s \code{fileEncoding} argument).}\item{what}{the \link{type} of \code{what} gives the type of data tobe read. (Here \sQuote{type} is used in the sense of\code{\link{typeof}}.) The supported types are \code{logical},\code{integer}, \code{numeric}, \code{complex}, \code{character},\code{raw} and \code{\link{list}}. If \code{what} is a list, it isassumed that the lines of the data file are records each containing\code{length(what)} items (\sQuote{fields}) and the list componentsshould have elements which are one of the first six (\link{atomic})types listed or \code{NULL}, see section \sQuote{Details} below.}\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 or not positive or an invalid value for an integer(and \code{nlines} is not set to a positive value), \code{scan} willread to the end of \code{file}.}\item{n}{integer: the maximum number of data values to be read, defaulting tono limit. Invalid values will be ignored.}\item{sep}{by default, scan expects to read \sQuote{white-space}delimited input fields. Alternatively, \code{sep} can be used tospecify a character which delimits fields. A field is alwaysdelimited by an end-of-line marker unless it is quoted.If specified this should be the empty character string (the default)or \code{NULL} or a character string containing just one single-bytecharacter.}\item{quote}{the set of quoting characters as a single characterstring or \code{NULL}. In a multibyte locale the quoting charactersmust be ASCII (single-byte).}\item{dec}{decimal point character. This should be a character stringcontaining just one single-byte character. (\code{NULL} and azero-length character vector are also accepted, and taken as thedefault.)}\item{skip}{the number of lines of the input file to skip beforebeginning to read data values.}\item{nlines}{if positive, the maximum number of lines of data to be read.}\item{na.strings}{character vector. Elements of this vector are to beinterpreted as missing (\code{\link{NA}}) values. Blank fields arealso considered to be missing values in logical, integer, numericand complex fields. Note that the test happens \emph{after}white space is stripped from the input (if enabled), so \code{na.strings} valuesmay need their own white space stripped in advance.}\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 than 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 trailing\sQuote{white space} from \code{character} fields (other fieldsare always stripped). Note: white space inside quoted strings isnot 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 unquoted white space from field \code{i} isstripped.}\item{quiet}{logical: if \code{FALSE} (default), 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{skip} and \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 more thanone record can appear on a single line). Note that using \code{fill = TRUE}implies that a record will be terminated at the end of a line.}\item{comment.char}{character: a character vector of length onecontaining a single character or an empty string. Use \code{""} toturn off the interpretation of comments altogether (the default).}\item{allowEscapes}{logical. Should C-style escapes such as\samp{\\n} be processed (the default) or read verbatim? Note that ifnot within quotes these could be interpreted as a delimiter (but notas a comment character).The escapes which are interpreted are the control characters\samp{\\a, \\b, \\f, \\n, \\r, \\t, \\v} and octal andhexadecimal representations like \samp{\\040} and \samp{\\0x2A}. Anyother escaped character is treated as itself, including backslash.Note that Unicode escapes (starting \samp{\\u} or \samp{\\U}: see\link{Quotes}) are never processed.}\item{fileEncoding}{character string: if non-empty declares theencoding used on a file (not a connection nor the keyboard) so thecharacter data can be re-encoded. See the \sQuote{Encoding} sectionof the help for \code{\link{file}}, and\manual{R-data}{Variations on read.table}.}\item{encoding}{encoding to be assumed for input strings. If thevalue is \code{"latin1"} or \code{"UTF-8"} it is used to markcharacter strings as known to be in Latin-1 or UTF-8: it is not usedto re-encode the input (see \code{fileEncoding}).See also \sQuote{Details}.}\item{text}{character string: if \code{file} is not supplied and this is,then data are read from the value of \code{text} via a text connection.}\item{skipNul}{logical: should \abbr{NUL}s be skipped when reading characterfields?}}\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. If any of the types is \code{NULL}, the correspondingfield is skipped (but a \code{NULL} component appears in the result).The type of \code{what} or its components can be one of the sixatomic vector types or \code{NULL} (see \code{\link{is.atomic}}).\sQuote{White space} is defined for the purposes of this function asone or more contiguous characters from the set space, horizontal tab,carriage return and line feed (aka \dQuote{newline}, \code{"\n"}). Itdoes not include form feed norvertical tab, but in Latin-1 and Windows 8-bit locales (but not UTF-8)'space' includes the non-breaking space \samp{"\xa0"}.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.The allowed input for a numeric field is optional whitespace, followed byeither \code{NA} or an optional sign followed by a decimal orhexadecimal constant (see \link{NumericConstants}), or \code{NaN},\code{Inf} or \code{infinity} (ignoring case). Out-of-range valuesare recorded as \code{Inf}, \code{-Inf} or \code{0}.For an integer field the allowed input is optional whitespace,followed by either \code{NA} or an optional sign and one or moredigits (\samp{0-9}): all out-of-range values are converted to\code{NA_integer_}.If \code{sep} is the default (\code{""}), the character \samp{\\}in a quoted string escapes the following character, so quotes may beincluded 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.Quoting is only interpreted in character fields and in \code{NULL}fields (which might be skipping character fields).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 final line if the file ends in a line feed (\code{"\n"})and not if it does not. This might not be what you expected; see also\code{\link{readLines}}.If \code{comment.char} occurs (except inside a quoted characterfield), it signals that the rest of the line should be regarded as acomment and be discarded. Lines beginning with a comment character(possibly after white space with the default separator) are treated asblank lines.There is a line-length limit of 4095 bytes when reading from theconsole (which may impose a lower limit).% see \manual{R-intro}{}There is a check for a user interrupt every 1000 lines if \code{what}is a list, otherwise every 10000 items.If \code{file} is a character string and \code{fileEncoding} isnon-default, or if it is a not-already-open \link{connection} with anon-default \code{encoding} argument, the text is converted to UTF-8and declared as such (and the \code{encoding} argument to \code{scan}is ignored). See the examples of \code{\link{readLines}}.Embedded \abbr{NUL}s in the input stream will terminate the field currentlybeing read, with a warning once per call to \code{scan}. Setting\code{skipNul = TRUE} causes them to be ignored.}\value{if \code{what} is a list, a list of the same length and same names (asany) as \code{what}.Otherwise, a vector of the type of \code{what}.Character strings in the result will have a declared encoding if\code{encoding} is \code{"latin1"} or \code{"UTF-8"}.}\note{The default for \code{multi.line} differs from S. To read one recordper line, use \code{flush = TRUE} and \code{multi.line = FALSE}.(Note that quoted character strings can still include embedded newlines.)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.Using \code{scan} on an open connection to read partial lines can losechars: use an explicit separator to avoid this.Having \code{nul} bytes in fields (including \samp{\\0} if\code{allowEscapes = TRUE}) may lead to interpretation of thefield being terminated at the \code{nul}. They not normally presentin text files -- see \code{\link{readBin}}.}\references{\bibshow{R:Becker+Chambers+Wilks:1988}}\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}}.\code{Quotes} for the details of C-style escape sequences.\code{\link{readChar}} and \code{\link{readBin}} to read fixed orvariable length character strings or binary representations of numbersa few at a time from a connection.}\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 onescan("ex.data", what = list("","","")) # flush is F -> read "7"scan("ex.data", what = list("","",""), flush = TRUE)unlink("ex.data") # tidy up## "inline" usagescan(text = "1 2 3")}\keyword{file}\keyword{connection}