R中读取包含中文字符的文件时这个诡异的错误你见过吗?
生活随笔
收集整理的這篇文章主要介紹了
R中读取包含中文字符的文件时这个诡异的错误你见过吗?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們有一個文件,里面寫了一些中文信息,命名為chinese.txt,內容為
Train Time 轉錄組開課時間 2021/10/29-2021/10/31 臨床基因組學開課時間 2021/11/12-2021/11/14 宏基因組開課時間 2021/11/19-2021/11/21 擴增子開課時間 2022/01/07-2022/01/09嘗試讀入R,報錯 line 2 did not have 2 elements 很詭異的提示!!!
如果我們一直去數列數,這是怎么都不會發現問題的。考慮到大多數程序語言對非英文支持不好,考慮是編碼格式問題。
train <- read.table('chinese.txt')Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 2 did not have 2 elements
解決方案1:指定編碼格式
正確的讀了進來
train <- read.table('chinese.txt', fileEncoding = "utf-8", header=T) train## Train Time ## 1 轉錄組開課時間 2021/10/29-2021/10/31 ## 2 臨床基因組學開課時間 2021/11/12-2021/11/14 ## 3 宏基因組開課時間 2021/11/19-2021/11/21 ## 4 擴增子開課時間 2022/01/07-2022/01/09解決方案2:用readr包里面的read_tsv
這個使用更方便,適用范圍也更廣。有時在read.table中即使指定了fileEncoding = "utf-8"參數后依然解決不了問題的文件,用readr毫無壓力。
library(readr) readr::read_tsv('chinese.txt')## ## -- Column specification -------------------------------------------------------------------------- ## cols( ## Train = col_character(), ## Time = col_character() ## )## # A tibble: 4 x 2 ## Train Time ## <chr> <chr> ## 1 轉錄組開課時間 2021/10/29-2021/10/31 ## 2 臨床基因組學開課時間 2021/11/12-2021/11/14 ## 3 宏基因組開課時間 2021/11/19-2021/11/21 ## 4 擴增子開課時間 2022/01/07-2022/01/09解決方案3:用data.table包里面的fread
需要手動指定編碼格式
library(data.table) # UTF-8 大小寫敏感 fread('chinese.txt', encoding = "UTF-8")## Train Time ## 1: 轉錄組開課時間 2021/10/29-2021/10/31 ## 2: 臨床基因組學開課時間 2021/11/12-2021/11/14 ## 3: 宏基因組開課時間 2021/11/19-2021/11/21 ## 4: 擴增子開課時間 2022/01/07-2022/01/09往期精品(點擊圖片直達文字對應教程)
機器學習
后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的R中读取包含中文字符的文件时这个诡异的错误你见过吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】用matlab画极坐标图,希望不同
- 下一篇: pip 安装网络超时解决方案