当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R scan 读取数据值


R语言 scan 位于 base 包(package)。

说明

从控制台或文件将数据读入向量或列表。

用法

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)

参数

file

要从中读取数据值的文件的名称。如果指定的文件是"",然后从键盘(或其他任何方式)获取输入stdin()读取输入是否被重定向或R已嵌入)。 (在这种情况下,输入可以通过空行或 EOF 信号终止,‘⁠Ctrl-D⁠' 在 Unix 上和 '⁠Ctrl-Z⁠’在 Windows 上。)

否则,将解释文件名相对的到当前工作目录(由getwd()),除非它指定绝对小路。 Tilde-expansion 在支持的情况下执行。跑步时R从脚本中,file = "stdin"可以用来指代进程的stdin文件流。

这可以是压缩文件(请参阅file)。

或者, file 可以是 connection ,如有必要,它将打开,如果需要,则在函数调用结束时关闭。无论以何种模式打开连接,LF、CRLF 或 CR 中的任何一个都将被接受作为行的 EOL 标记,因此将匹配 sep = "\n"

file也可以是完整的URL。 (有关支持的 URL 方案,请参阅 url 帮助的“URL”部分。)

要读取不是当前编码的数据文件(例如 UTF-8 语言环境中的 Latin-1 文件或相反),请使用 file 连接设置其 encoding 参数(或 scanfileEncoding 参数)。

what

whattype 给出要读取的数据类型。 (这里 ‘type’ 在 typeof 的意义上使用。)支持的类型是 logicalintegernumericcomplexcharacterrawlist .如果 what 是一个列表,则假定数据文件的行是每个包含 length(what) 项 (‘fields’) 的记录,并且列表组件应具有前六个元素之一 (atomic )列出的类型或 NULL ,请参阅下面的“详细信息”部分。

nmax

要读取的数据值的最大数量,或者如果what 是列表,则要读取的最大记录数量。如果省略或不是正值或整数值无效(并且 nlines 未设置为正值),scan 将读取到 file 的末尾。

n

integer:读取数据值的最大数量,默认无限制。无效值将被忽略。

sep

默认情况下,扫描期望读取“空白”分隔的输入字段。或者,sep 可用于指定分隔字段的字符。除非用引号引起来,否则字段始终由行尾标记分隔。

如果指定,则应为空字符串(默认值)或 NULL 或仅包含一个单字节字符的字符串。

quote

作为单个字符串或 NULL 的引用字符集。在多字节语言环境中,引用字符必须是 ASCII(单字节)。

dec

小数点字符。这应该是一个仅包含一个单字节字符的字符串。 (NULL 和零长度字符向量也被接受,并作为默认值。)

skip

开始读取数据值之前要跳过的输入文件的行数。

nlines

如果为正,则表示要读取的最大数据行数。

na.strings

字符向量。该向量的元素将被解释为缺失 (NA) 值。空白字段也被视为逻辑、整数、数字和复杂字段中的缺失值。请注意,测试是在从输入中去除空格之后进行的,因此 na.strings 值可能需要提前去除它们自己的空格。

flush

逻辑:如果 TRUEscan 将在读取请求的最后一个字段后刷新到行尾。这允许在最后一个字段之后添加注释,但不允许在一行上放置多个记录。

fill

逻辑:如果 TRUEscan 将隐式地将空字段添加到字段少于 what 所暗示的字段的任何行。

strip.white

what 参数中的项目相对应的逻辑值向量。它仅在指定 sep 时使用,并允许从 character 字段中去除前导和尾随“空白”(numeric 字段始终被去除)。注意:带引号的字符串内的空格不会被去除。

如果strip.white长度为1,则适用于所有字段;否则,如果 strip.white[i]TRUE 并且 i 字段是模式字符(因为 what[i] 是),则字段 i 中的前导和尾随未加引号的空格将被删除。

quiet

逻辑:如果FALSE(默认),scan()将打印一行,说明已读取了多少个项目。

blank.lines.skip

逻辑:如果输入中的 TRUE 空白行被忽略,除非计算 skipnlines

multi.line

合乎逻辑的。仅当 what 是列表时使用。如果是 FALSE ,则所有记录必须出现在一行上(但多条记录可以出现在一行上)。请注意,使用 fill = TRUE 意味着记录将在行尾终止。

comment.char

字符:长度为 1 的字符向量,包含单个字符或空字符串。使用 "" 完全关闭注释的解释(默认)。

allowEscapes

合乎逻辑的。 C 风格的转义是否应该如‘⁠\n⁠’ 被处理(默认)还是逐字读取?请注意,如果不在引号内,它们可能会被解释为分隔符(但不能解释为注释字符)。

被解释的转义符是控制字符‘⁠\a、\b、\f、\n、\r、\t、\v⁠’以及八进制和十六进制表示形式,例如‘⁠\040⁠' 和 '⁠\0x2A⁠’。任何其他转义字符都被视为其本身,包括反斜杠。请注意 Unicode 转义(以‘⁠\u⁠' 或者 '⁠\U⁠': 看base Quotes)从未被处理。

fileEncoding

字符串:如果非空,则声明文件(不是连接或键盘)上使用的编码,因此可以重新编码字符数据。请参阅 file 帮助的“编码”部分和“R 数据导入/导出手册”。

encoding

输入字符串采用的编码。如果值为 "latin1""UTF-8",则用于将字符串标记为已知的 Latin-1 或 UTF-8:它不用于重新编码输入(请参阅 fileEncoding )。另请参阅“详细信息”。

text

字符串:如果未提供 file,则通过文本连接从 text 的值读取数据。

skipNul

逻辑:读取字符字段时是否应该跳过 NULL?

细节

what 的值可以是类型列表,在这种情况下,scan 返回向量列表,其类型由 what 中元素的类型指定。这提供了一种读取柱状数据的方法。如果任何类型为 NULL ,则跳过相应字段(但结果中会出现 NULL 组件)。

what 或其组件的类型可以是六种原子向量类型之一或 NULL (请参阅 is.atomic )。

出于此函数的目的,“空白”被定义为来自设定空间、水平制表符、回车符和换行符的一个或多个连续字符(又名“newline”,"\n")。它不包括换页符或垂直制表符,但在 Latin-1 和 Windows 8 位语言环境中(但不包括 UTF-8)'space' 包括不间断空格‘⁠"\xa0"⁠’。

空数字字段始终被视为缺失值。空字符字段将被扫描为空字符向量,除非 na.strings 包含 ""(当它们被视为缺失值时)。

数字字段允许的输入是可选空格后跟 NA 或可选符号后跟十进制或十六进制常数(请参阅 NumericConstants ),或 NaNInfinfinity (忽略大小写)。超出范围的值记录为 Inf-Inf0

对于整数字段,允许的输入是可选的空格,后跟NA或一个可选的符号和一个或多个数字(‘⁠0-9⁠’):所有超出范围的值都会转换为NA_integer_.

如果sep是默认值(""), 人物 '⁠\⁠带引号的字符串中的 ' 会转义后面的字符,因此可以通过转义引号将引号包含在字符串中。

如果sep非默认,字段可以用‘的样式引用.csv' 分隔符位于引号内的文件 (''或者"") 被忽略,并且可以通过将引号加倍来将引号放入字符串内。然而,如果sep = "\n"默认情况下,假设人们想要逐字阅读整行。

仅在字符字段和 NULL 字段(可能会跳过字符字段)中解释引用。

请注意,由于 sep 是分隔符而不是终止符,因此如果文件以换行符 ( "\n" ) 结尾,则通过 scan("foo", sep = "\n", blank.lines.skip = FALSE) 读取文件将给出一个空的最后一行,否则则不会。这可能不是你所期望的;另请参见readLines

如果出现comment.char(除了在带引号的字符字段内),则表明该行的其余部分应被视为注释并被丢弃。以注释字符开头的行(可能在带有默认分隔符的空格之后)被视为空行。

从控制台读取时,line-length 限制为 4095 字节(这可能会施加下限:请参阅“R 简介”)。

如果 what 是列表,则每 1000 行检查一次用户中断,否则每 10000 个项目检查一次。

如果 file 是字符串并且 fileEncoding 不是默认值,或者如果它是带有非默认 encoding 参数的 not-already-open connection,则文本将转换为 UTF-8 并如此声明(scanencoding 参数被忽略)。请参阅 readLines 的示例。

输入流中嵌入的 nul 将终止当前正在读取的字段,每次调用 scan 时都会发出警告。设置 skipNul = TRUE 会导致它们被忽略。

如果 what 是一个列表,则与 what 具有相同长度和相同名称(任意)的列表。

否则,为 what 类型的向量。

如果 encoding"latin1""UTF-8" ,结果中的字符串将具有声明的编码。

注意

multi.line 的默认值与 S 不同。要每行读取一条记录,请使用 flush = TRUEmulti.line = FALSE 。 (请注意,带引号的字符串仍然可以包含嵌入的换行符。)

如果未指定项目数量,内部机制会以 2 的幂次重新分配内存,因此最多可以使用所需内存的三倍。 (它需要旧副本和新副本。)如果可以,请在输入大型向量时指定 nnmax,并在输入大型列表时指定 nmaxnlines

在打开的连接上使用 scan 读取部分行可能会丢失字符:使用显式分隔符来避免这种情况。

拥有nul字段中的字节(包括‘⁠\0⁠' 如果allowEscapes = TRUE)可能会导致该字段的解释终止于nul。它们通常不会出现在文本文件中 - 请参阅readBin.

例子

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 one
scan("ex.data", what = list("","","")) # flush is F -> read "7"
scan("ex.data", what = list("","",""), flush = TRUE)
unlink("ex.data") # tidy up

## "inline" usage
scan(text = "1 2 3")

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

read.table 更方便用户读取数据矩阵; readLines 一次读取一行文件。 write

Quotes 了解 C 风格转义序列的详细信息。

readCharreadBin 从连接中一次读取固定或可变长度的字符串或数字的二进制表示形式。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Read Data Values。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。