當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。