在 R 中逐行讀取文字檔案

Jesse John 2023年1月30日 2022年5月18日
  1. R 中的連線是什麼
  2. 在 R 中使用 readLines() 函式逐行讀取文字檔案
在 R 中逐行讀取文字檔案

使用 readLines() 函式很容易將純文字檔案讀入 R。結果是一個字元向量,其中每個元素都是一個字串,包括來自文字檔案的一行。

但是當我們不想將整個檔案載入到記憶體中時,我們需要一次一行地讀取和處理文字檔案。

R 中的連線是什麼

在 R 中,連線是類檔案物件的介面。

諸如 readLines() 之類的函式開啟一個連線,使用它並關閉它。它一次讀取整個檔案。

要順序讀取檔案,我們必須顯式開啟一個連線。為此,我們將使用 file() 函式。

我們將使用的選項如下。

  1. description 代表檔名
  2. open 指定我們只想讀取檔案
  3. blocking = TRUE

在 R 中使用 readLines() 函式逐行讀取文字檔案

只要讀取行,我們就會使用 readLines() 函式。因為我們不知道行數,所以我們需要知道何時到達檔案末尾。

當檔案中沒有更多行時,readLines() 函式返回一個空字元向量 character(0)

此時,我們將使用 break 退出迴圈。請注意,迴圈不會在空行處中斷,因為它們具有行尾標記。

我們將在每次迴圈迭代中使用 identical() 函式來檢查該行是否與 character(0) 相同。

如果是,我們 break;否則,我們處理該行。在示例中,我們將其列印出來。

根據文件,文字檔案的最後一行應該有一個行尾標記,以便 readLines() 函式能夠始終如一地工作。

首先,用以下文字建立一個純文字檔案,並用 UTF-8 編碼和合適的檔名儲存(我們需要相應地替換程式碼中的檔名)。

The first line.
The second line.
The third line.

Last line.

在示例程式碼中,我們將執行以下操作。

  1. 建立一個連線並開啟它。
  2. 迴圈遍歷檔案,一次一行,列印它。
  3. 當行是 character(0) 時退出迴圈。
  4. 關閉連線。顯式開啟的連線需要顯式關閉。

示例程式碼:

# Explicitly create and and open a connection.
# REPLACE THE FILE NAME AS PER YOUR FILE.
myCon = file(description = "filename.txt", open="r", blocking = TRUE)

# The position in the connection advances to the next line on each iteration.
# Loop till the line is the empty vector, character(0).
repeat{
  pl = readLines(myCon, n = 1) # Read one line from the connection.
  if(identical(pl, character(0))){break} # If the line is empty, exit.
  print(pl) # Otherwise, print and repeat next iteration.
}

# Explicitly opened connection needs to be explicitly closed.
close(myCon)
rm(myCon) # Removes the connection object from memory.

參考和幫助

請參閱 R 資料匯入/匯出手冊 的第 7 節。

此外,請參閱 connectionsfilereadLines 的文件。

Author: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

相關文章 - R File