Package base version 4.2.0
Description
从控制台或文件中读取数据到向量或列表中。
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)
Argumens
参数【file】:要从中读取数据值的文件的名称。如果指定的文件为"",则从键盘获取输入(或者如果重定向输入或嵌入R,则从stdin()读取)。(在这种情况下,输入可以通过空行或EOF信号来终止,在Unix上是' Ctrl-D ',在Windows上是' Ctrl-Z '。)
否则,文件名将相对于当前工作目录(由getwd()给出)进行解释,除非它指定了绝对路径。在支持的地方执行波浪扩展。当从脚本运行R时,file = "stdin"可用于引用进程的stdin文件流。
这可以是一个压缩文件。
或者,file可以是一个连接,它将在必要时打开,如果需要,则在函数调用结束时关闭。无论以何种模式打开连接,LF、CRLF或CR中的任何一个都将被接受为一行的EOL标记,因此将匹配sep = "\n"。
文件也可以是一个完整的URL。(有关支持的URL方案,请参阅URL帮助的' URLs '部分。)
要读取非当前编码的数据文件(例如UTF-8区域设置中的Latin-1文件或相反),请使用文件连接设置其编码参数(或scan的fileEncoding参数)。
参数【what】:给出了要读取的数据的类型。(这里的type是typeof的意思。)支持的类型有逻辑类型、整数类型、数字类型、复杂类型、字符类型、原始类型和列表类型。如果what是一个列表,则假定数据文件的每行都是包含长度(what)项(' fields ')的记录,并且列表组件的元素应该是列出的前六种(原子)类型之一或NULL,请参阅下面的' Details '部分。
参数【nmax】:要读取的数据值的最大数量,或者如果是列表,则要读取的记录的最大数量。如果省略或不为正数或整数的值无效(并且nlines未设置为正数),scan将读取到文件的末尾。
参数【n】:整数:读取数据值的最大个数,默认为不限制。无效值将被忽略。
参数【sep】:默认情况下,scan期望读取“空白”分隔的输入字段。或者,sep可用于指定分隔字段的字符。除非用引号括起来,否则字段总是用行结束标记分隔。如果指定,则应该是空字符串(默认值)或NULL或仅包含一个单字节字符的字符串。
参数【quote】:引用字符的集合作为单个字符串或NULL。在多字节区域设置中,引号字符必须是ASCII(单字节)。
参数【dec】:小数点字符。这应该是一个只包含一个单字节字符的字符串。(NULL和零长度字符向量也可以接受,并作为默认值。)
参数【skip】:在开始读取数据值之前要跳过的输入文件的行数。
参数【nlines】:如果为正数,则表示要读取的最大数据行数。
参数【na.strings】:特征向量。这个向量的元素被解释为缺失(NA)值。空白字段也被认为是逻辑、整数、数字和复杂字段中的缺失值。请注意,测试发生在从输入中删除空白之后,所以na.strings值可能需要预先去掉它们自己的空白。
参数【flush】:逻辑值。如果为TRUE,则scan将在读取请求的最后一个字段后刷新到行尾。这允许在最后一个字段后面放置注释,但禁止在一行中放置多个记录。
参数【fill】:逻辑值。如果为TRUE, scan将隐式地向字段少于what所暗示的任何行添加空字段。
参数【strip.white】:与what实参中的项相对应的逻辑值向量。它仅在指定sep时使用,并允许从字符字段中剥离前导和尾随的“空白”(数字字段总是被剥离)。注意:引号内的空格不会被去掉。如果strip.white长度为1,适用于所有字段;;否则,strip.white[i]为TRUE,并且第i个字段是模式字符(因为[i]是),那么字段i的前导和尾部未引号的空白将被剥离。
参数【quiet】:逻辑值。如果FALSE(默认值),scan()将打印一行,表示读取了多少项。
参数【blank.lines.skip】:逻辑值。如果为TRUE,输入中的空行将被忽略,除非对跳过和行进行计数。
参数【multi.line】:逻辑值。仅当what是列表时使用。如果为FALSE,则所有记录必须出现在一行上(但多条记录可以出现在一行上)。注意,使用fill = TRUE意味着记录将在一行的末尾终止。
参数【comment.char】:字符值。长度为1的字符向量,包含单个字符或空字符串。使用""完全关闭注释的解释(默认值)。
参数【allowEscapes】:逻辑值。c风格的转义如' \n '应该被处理(默认)还是逐字读取?请注意,如果不在引号内,则可以将其解释为分隔符(而不是注释字符)。被解释的转义是控制字符' \a, \b, \f, \n, \r, \t,\v '和八进制和十六进制表示,如' \040 '和' \0x2A '。任何其他转义字符都被视为其本身,包括反斜杠。请注意,Unicode转义(以' \u '或' \U '开头:请参阅引号)永远不会被处理。
参数【fileEncoding】:字符串。If non-empty声明文件(不是连接也不是键盘)上使用的编码,因此字符数据可以重新编码。请参阅文件帮助的“编码”部分,以及“R数据导入/导出手册”。
参数【encoding】:为输入字符串假定的编码。如果值为"latin1"或"UTF-8",则用于将字符串标记为已知的Latin-1或UTF-8:它不用于重新编码输入(参见fileEncoding)。另见“详细信息”。
参数【text】:字符串。如果没有提供file,则通过文本连接从text的值读取数据。
参数【skipNul】:逻辑值。在读取字符字段时应该跳过空值吗?
Details
what的值可以是一个列表类型,在这种情况下,scan返回一个带有what中元素类型给定类型的vector列表。这提供了一种读取列数据的方法。如果任何类型为NULL,则跳过相应的字段(但是结果中会出现NULL组件)。
what或其组件的类型可以是六个原子向量类型之一,也可以是NULL(参见is.atomic)。
在此函数中,“White space”被定义为一个或多个连续字符,来自设置空格、水平制表符、回车符和换行符(又名“换行符”、“\n”)。它不包括表单提要和垂直制表符,但在Latin-1和Windows 8位区域设置中(但不包括UTF-8)'space'包括非破缺空间' ' '\xa0 ' ' '。
空的数字字段总是被视为缺失值。空字符字段被扫描为空字符向量,除非na.strings在被视为缺失值时包含""。
数字字段允许的输入是可选的空格,后面跟着NA或可选的符号,后面跟着十进制或十六进制常数(参见NumericConstants),或NaN、Inf或infinity(忽略大小写)。超出范围的值记录为Inf、-Inf或0。
对于整数字段,允许的输入是可选的空白,后面跟着NA或可选的符号和一个或多个数字(' 0-9 '):所有超出范围的值都转换为NA_integer_。
如果sep是默认值(""),引号字符串中的字符' \ '会转义后面的字符,因此引号可以通过转义包含在字符串中。
如果sep是非默认值,则字段可能以' .csv '文件的样式被引用,其中引号("或"")内的分隔符被忽略,并且引号可以通过将它们加倍放入字符串中。但是,如果sep = "\n",则默认情况下假定希望逐字读取整行。
引号只在字符字段和NULL字段(可能跳过字符字段)中被解释。
请注意,由于sep是分隔符而不是结束符,因此通过scan("foo", sep = "\n", blank.lines.skip = FALSE)读取文件时,如果文件以换行符("\n")结尾,则会给出一个空的最后一行,如果不是,则不会。这可能不是你所期望的;参见readLines。
出现comment.char(除了在带引号的字符字段内),则表示该行的其余部分应视为注释并被丢弃。以注释字符开头的行(可能在带有默认分隔符的空白之后)被视为空行。
当从控制台读取时,有一个4095字节的行长度限制(这可能会施加一个较低的限制:参见“R简介”)。
如果是列表,则每1000行检查一次用户中断,否则每10000项检查一次。
如果file是一个字符串并且fileEncoding是非默认的,或者如果它是一个带有非默认编码参数的尚未打开的连接,则文本将被转换为UTF-8并以此声明(并且要扫描的编码参数将被忽略)。请参阅readLines的示例。
输入流中的嵌入式空值将终止当前正在读取的字段,并在每次调用scan时发出警告。设置skipNul = TRUE会导致忽略它们。
Value
如果what是列表,则是与what具有相同长度和相同名称的列表。
否则,向量的类型与what相同。
如果编码为“latin1”或“UTF-8”,则结果中的字符串将具有声明的编码。
Note
multi.line 默认值与 S不同。要每行读取一条记录,请使用flush = TRUE和multi.line = FALSE。(注意,加引号的字符串仍然可以包含嵌入的换行符。)
如果未指定项数,则内部机制将以2的幂重新分配内存,因此可以使用最多三倍于所需的内存。(它需要新的和旧的副本。)如果可以,在输入大向量时指定n或nmax,在输入大列表时指定nmax或lines。
在打开的连接上使用scan读取部分行可能会丢失字符:使用显式分隔符来避免这种情况。
在字段中使用null字节(如果allowEscapes = TRUE,则包括' \0 ')可能导致字段的解释在null处终止。它们通常不会出现在文本文件中-参见readBin。