R語言 | 更快的表格文件讀取方法!

2021-03-02 生信控

友情提示:藍色下劃線字體為引文,請保持警惕!

使用R語言讀取 Affymetrix Human Exon 1.0 ST Array 晶片平臺探針注釋文件:

https://www.affymetrix.com/analysis/downloads/na36/wtexon/HuEx-1_0-st-v2.na36.hg19.probeset.csv.zip

解壓後的.csv文件有950MB+,部分內容如下:

其中,前22行為"#"開頭的注釋行,所以可以不讀入。本文將以該文件為例,介紹三種讀取方法,並測評讀取速度上的優劣!

1、utils包中的 read.csv 函數,打開R即可直接使用,所以不需要另外安裝加載R包:

data = read.csv("HuEx-1_0-st-v2.na36.hg19.probeset.csv", header = T, comment.char = "#")

2、data.table包中的 fread 函數,需要安裝加載data.table包,由於沒有 read.csv 函數中類似 comment.char = "#"的參數設置,故需要通過skip跳過一定數量的行:

p_load(data.table)

data = as.data.frame(fread("HuEx-1_0-st-v2.na36.hg19.probeset.csv", skip = 22, header = T, sep = ",", fill = T))

該函數有個明顯的缺點,就是本例中"#"的行,無法很方便的通過其他參數識別並丟棄,參考:

https://github.com/Rdatatable/data.table/issues/856

Even though fread(cmd='grep -v "#" table.csv') works fine in general, it's not cross platform compatible and makes your code a bit harder to read.

3、readr包中的 read_csv 函數,需要安裝加載readr包,這個包在我們的歷史文章中數次出現,包括在GEOquery包中的重要作用將數據高效輸出到文件中、以及 將數據追加輸出到表格文件。與前兩種函數的區別在於參數名,col_names = T等同於header = T,如下:

p_load(readr)

data = as.data.frame(read_csv("HuEx-1_0-st-v2.na36.hg19.probeset.csv", comment = "#", col_names = T))

4、比較。三種函數都可以讀取.csv格式文件,但 read.csv 函數在讀取大文件時過於緩慢,我們使用microbenchmark包測試多次執行的情況下,三種函數讀取本例文件的用時( system.time函數只能計算單次,所以結果會不穩健,可能存在一定的偏倚):

microbenchmark is based on repeated iterations. system.time is the time for a single runHere we』ll need to use microbenchmark() instead of system.time() in order to get enough accuracy to see a difference

p_load(microbenchmark)

datafile = "HuEx-1_0-st-v2.na36.hg19.probeset.csv"

benchmark = microbenchmark(

read.csv = read.csv(datafile, header = T, comment.char = "#", stringsAsFactors = F),

fread = as.data.frame(fread(datafile, skip = 22, header = T, sep = ",", fill = T)), # nThread=getDTthreads(),即使用所有能用的核心

read_csv = as.data.frame(read_csv(datafile, comment = "#", col_names = T)), times = 10) # 10次執行

print(benchmark, signif = 2)

結果如下:

測試了10次執行, fread的速度是最快的,讀取950Mb+的.csv文件平均只需要5.1秒, read_csv 需要11秒,而 read.csv 函數則需要36秒,故在執行速度上的順序是 fread > read_csv > read.csv。

fread 的高效性來源之一是支持多線程:

參數nThread: The number of threads to use. Experiment to see what works best for your data on your hardware.

對統計結果做個可視化:

ggplot2::autoplot(benchmark)

小提琴圖的橫坐標為時間,數據分布在左側表示用該方法用時短,右側表示讀取用時較長。

綜上:對於較大的.csv文件的讀取,推薦使用 fread 和 read_csv 函數!

而對於.xlsx或.xls文件,推薦使用readxl包中的 read_excel 函數進行讀取

友情提示:本文涉及的R包安裝詳見下示!

相關焦點

  • 用R語言讀取EXCEL文件的方法
    為了解決這一尷尬的問題,下面我就教一下大家怎麼用統計專業的R語言來讀取數據(數據處理之前很重要的一個步驟)        用R讀取excel文件中的數據,需要先搭建一個Java的環境(配置好JDK),然後再用 install.packages("xlsx") 指令導入相關的包(常見的Excel文件格式是xlsx,而處理xlsx文件這個包是使用Java語言來寫的
  • R語言讀取xlsx文件
    關於R語言讀取Excel文件,比較麻煩,我從來都反對直接讀取xlsx文件,因為爬蟲數據時,一般保存的格式都是csv文件,或者直接保存到資料庫裡面
  • 編程模板-R語言腳本寫作:最簡單的統計與繪圖,包安裝、命令行參數解析、文件讀取、表格和矢量圖輸出
    之前分享過我個人的《Shell語言》和《Perl語言》腳本寫作模板(藍色字為連結直達),今天再分享一下我的R語言模板,一次性解決困擾新手的眾多問題,如包安裝、命令行參數解析、文件讀取、Anova組間統計和箱線圖展示、表格和矢量圖輸出等。
  • 三種方法高效讀取xls/xlsx格式文件
    在讀取數據前,可以先閱讀這篇文章(猛戳:Excel數據導入R前的注意事項),將Excel中的數據進行預處理,方便讀取以防出錯。另外spss、sas、stata等軟體的數據格式文件導入請參見這篇文章(猛戳:R語言統計與繪圖:數據的輸入與輸出)。
  • R語言 | 表格?壓縮?你...過來啊!
    http://www.sthda.com/english/wiki/reading-data-from-excel-files-xls-xlsx-into-r2、如何讀取壓縮的表格文件?事情就很奇怪,拿到壓縮文件後的第一反應是解壓縮,然後是嘗試用excel打開查看,當發現文件過大,無法在excel裡查看及操作時,才想起使用R,隨之考慮用更高效的大文件讀取方法。慣性思維導致...反倒是忽略了直接用R讀取壓縮文件...
  • 手把手教你用R語言讀取CSV文件
    導讀:R語言有許多種方法去獲取數據,最常用的是讀取CSV文件。
  • R語言讀取csv文件
    csv文件一般是用的最多的數據文件格式,這一節主要介紹怎麼讀取csv文件。
  • R語言中使用scan函數讀取文件中的數據
    在上一篇文章中介紹了使用scan函數從鍵盤中獲取數據的方法,本篇文章將介紹scan函數的另外一個常用功能:從文件中獲取數據。從文本文件中讀取數據假設在R的當前工作目錄中有一個文件:student.txt,其存儲的數據如下圖所示,每個數據以空格分隔。
  • 一起學Python-外部文件的讀取方法
    今天我們來一起學習Python如何對文件進行操作,Python中對文件的操作非常簡單,不像其他語言那麼麻煩,下面我們通過實例來學習下。認識open代碼既然要操作文件,所以我們需要用open代碼去打開一個文件,比如我們想要讀取一個txt文檔可以寫入一下代碼:f = open("u_info",mode="r",encoding="UTF-8")
  • C語言操作EXCEL文件(讀寫)
    C語言讀取Excel文件內容的功能,查閱了很多資料,大部分是通過ODBC或者過OLE/COM對Excel表格的讀取操作,這變要求在工程中添加類,如CApplicaton及其頭文件等,這包括Excel接口、導入類、頭文件等。
  • 利用Python讀取外部數據文件
    解決辦法有兩種情況:1)當原始文件txt或csv的數據不是uft8格式時,需要另存為utf8格式編碼;2)如果原始的數據文件就是uft8格式,為了正常讀入,需要將read_csv函數的參數encoding設置為utf-8將原始數據另存為utf8格式的數據,重新讀入txt數據
  • php中讀取文件內容的幾種方法
    1.fread  string fread ( int $handle , int $length )
  • python學習筆記(6):csv文件讀取
    昨天發了篇文章,是講如何讀取.xls格式文件的,今天來說下CSV文件怎麼讀取。我個人用CSV還是比較多的,因為讀取起來比較方便。小試牛刀「示例文件」「來個簡單式的」讀取csv文件,用的是csv.reader()這個方法。
  • 零基礎學python19課類計算機的編碼與解碼、文件的讀取與寫入
    編碼encode()與解碼decode()編碼encode就是把人類語言轉成計算機語言。解碼decode就是把計算機語言轉成人類語言。文件讀寫在Python江湖中,可以使用Python操作計算機中的文件,可以讀取寫入文本內容、音頻、表格、郵件等內容。你能會說,為什麼非要使用Python來操作文件呢?我直接用滑鼠操作不好嗎?假如現在讓你把1000個學生的1000份word中的作文放到一個word中,形成一本書,你怎麼辦。複製粘貼1000次?這時候我們就需要使用Python來完成,還是一次性的完成。
  • [R語言學習系列4]數據的讀取和輸出
    我們使用R語言來進行數據處理,那麼就需要將本地的數據讀取到R中,當在R中進行一定的處理之後,我們也需要將處理之後的數據輸出。因此,本文就給大家介紹一下,R語言中最基本的數據讀取和輸出的方法。工作路徑(work directory)是指當前R的文件夾地址在哪?
  • 使用文件對象讀取Python文件內容
    文件對象提供了三種讀取文件內容的方法,分別是read、readline、readlines。其中read方法即可以讀取文本文件也可以讀取二級制文件,readline和readlines方法只能讀取文本文件。下面分別予以說明。
  • MATLAB簡單粗暴教程(三)——MATLAB讀取文本文件
    文本流是解釋性的,最長可達255個字符,其中回車/換行將被轉換為換行符「\n」,(如果以"文本"方式打開一 個文件,那麼在讀字符的時候,系統會把所有的"\r\n"序列轉成"\n",在寫入時把"\n"轉成"\r\n" )。二進位流是非解釋性的,一次處理一個字符,並且不轉換字符。
  • 專題19 | Python文件打開與讀取
    ,如「rt」、「at」、「wt」、「rb」、「ab」、「wb」。(1)創建名為file1.txt的文件當file1.txt文件與Python腳本所在目錄相同時,訪問文件的Python語句如下:f = open("file1.txt", "r")print(f.read())運行結果:Hello, My name is Kitty.
  • R語言答疑:txt文件無法被R正確讀入
    今天來解答一個網友的疑惑,或許你也曾遇到過這個問題噢~R語言中,txt無法正確的讀入的可能性有很多種。
  • 簡單小案例(一):使用Pandas在Python中讀取和寫入CSV文件
    有幾種不同的方法,例如,您可以使用Python的內置open()函數來讀取CSV(逗號分隔值)文件,或者可以使用Python的專用csv模塊來讀取和寫入CSV文件。根據您的用例,您還可以使用Python的Pandas庫讀取和寫入CSV文件。在本文中,您將看到如何使用Python的Pandas庫讀取和寫入CSV文件。但是,在此之前,讓我們簡要地看看什麼是CSV文件。