函數 read.table
是讀取矩形格子狀數據最爲便利的方式。由於實際可能遇到的狀況比較多,因此預設了一些函數。這些函數調用了 read.table
但改變了它的一些默認參數。安全
注意,read.table
不是一種有效地讀大數值矩陣的方法:見下面的 scan
函數。函數
一些須要考慮到問題是:編碼
若是文件中包含非-ASCII字符字段,要確保以正確的編碼方式讀取。這是在UTF-8的本地系統裏面讀取Latin-1文件的一個主要問題。此時,能夠以下處理spa
read.table(file("file.dat", encoding="latin1"))
注意,這在任何能夠呈現Latin-1名字的本地系統裏面運行。操作系統
咱們建議你明確地設定 header
參數。按照慣例,首行只有對應列的字段而沒有行標籤對應的字段。所以,它會比餘下的行少一個字段。(若是須要在 R 裏面看到這一行,設置 header = TRUE
。)若是要讀取的文件裏面有行標籤的頭字段(多是空的),如下面的方式讀取設計
read.table("file.dat", header = TRUE, row.names = 1)
列名字能夠經過 col.names
顯式地設定;顯式設定的名字會替換首行裏面的列名字(若是存在的話)。code
一般,打開文件看一下就能夠肯定文件所使用的字段分隔符,但對於空白分割的文件,能夠選擇默認的sep = ""
(它能使用任何空白符做爲分隔符,好比空格,製表符,換行符), sep = " "
或者 sep = "\t"
。注意,分隔符的選擇會影響輸入的被引用的字符串。blog
若是你有含有空字段的製表符分割的文件,必定要使用 sep = "\t"
。ip
quote
控制。對於sep = "\n"
,默認值改成 quote = ""
。 若是沒有設定分隔字符,在被引號括起的字符串裏面,引號須要用 C格式的逃逸方式逃逸,即在引號前面直接加反斜槓 \。element
若是設定了分隔符,在被引號括起的字符串裏面,按照電子表格的習慣,把引號重複兩次以達到逃逸的效果。例如
'One string isn''t two',"one more"
能夠被下面的命令讀取
read.table("testfile", sep = ",")
這在默認分隔符的文件裏面不起做用。
NA
表示缺損值,可是,這能夠經過參數 na.strings
改變。參數 na.strings
是一個能夠包括一個或多個缺損值得字符描述方式的向量。 數值列的空字段也被看做是缺損值。
在數值列,值 NaN
,Inf
和 -Inf
均可以被接受的。
從一個電子表格中導出的文件一般會把拖尾的空字段(包括?塹姆指舴? 忽略掉。爲了讀取這樣的文件,必須設置參數 fill = TRUE
。
若是設定了分隔符,字符字段起始和收尾處的空白會做爲字段一部分看待的。爲了去掉這些空白,可使用參數 strip.white = TRUE
。
默認狀況下,read.table
忽略空白行。這能夠經過設置 blank.lines.skip = FALSE
來改變。但這個參數只有在和 fill = TRUE
共同使用時纔有效。這時,多是用空白行代表規則數據中的缺損樣本。
除非你採起特別的行動,read.table
將會爲數據框的每一個變量選擇一個合適的類型。若是字段沒有缺損以及不能直接轉換,它會按 logical
, integer
,numeric
和 complex
的順序依次判斷字段類型。若是全部這些類型都失敗了,變量會轉變成因子。
參數 colClasses
和 as.is
提供了很大的控制權。 as.is
會 抑制字符向量轉換成因子(僅僅這個功能)。 colClasses
運行爲輸入中的每一個列設置須要的類型。
注意,colClasses
和 as.is
對每 列專用,而不是每個變量。所以,它對行標籤列也一樣適用(若是有的話)。
默認狀況下,read.table
用 # 做爲註釋標識字符。若是碰到該字符(除了在被引用的字符串內),該行中隨後的內容將會被忽略。只含有空白和註釋的行被看成空白行。
若是確認數據文件中沒有註釋內容,用 comment.char = ""
會比較安全 (也可能讓速度比較快)。
許多操做系統有在文本文件中用反斜槓做爲逃逸標識字符的習慣,可是Windows系統是個例外(在路徑名中使用反斜槓)。在 R 裏面,用戶能夠自行設定這種習慣是否用於數據文件。
read.table
和 scan
都有一個邏輯參數 allowEscapes
。從 R 2.2.0 開始,該參數默認爲否,並且反斜槓是惟一被解釋爲逃逸引用符的字符(在前面描述的環境中)。若是該參數設爲是,以C形式的逃逸規則解釋,也就是控制符如 \a, \b, \f, \n, \r, \t, \v
,八進制和十六進制如 \040
和 \0x2A
同樣描述。任何其它逃逸字符都看着是本身,包括反斜槓。
經常使用函數 read.csv
和 read.delim
爲 read.table
設定參數以符合英語語系本地系統中電子表格導出的CSV和製表符分割的文件。這兩個函數對應的變種read.csv2
和 read.delim2
是針對在逗號做爲小數點的國家使用時設計的。
若是 read.table
的可選項設置不正確,錯誤信息一般如下面的形式顯示
Error in scan(file = file, what = what, sep = sep, : line 1 did not have 5 elements
或者
Error in read.table("files.dat", header = TRUE) : more columns than column names
這些信息可能足以找到問題所在,可是輔助函數 count.fields
能夠進一步的深刻研究問題所在。
讀大的數據格子(data grid)時,效率最重要。設定 comment.char = ""
,以原子向量類型(邏輯型,整型,數值型,複數型,字符型或原味型)設置每列的colClasses
,給定須要讀入的行數 nrows
(適當地高估一點比不設置這個參數好)等措施會提升效率。