前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R中读取包含中文字符的文件时这个诡异的错误你见过吗?

R中读取包含中文字符的文件时这个诡异的错误你见过吗?

作者头像
生信宝典
发布2022-01-18 21:29:52
2.1K0
发布2022-01-18 21:29:52
举报
文章被收录于专栏:生信宝典生信宝典

我们有一个文件,里面写了一些中文信息,命名为chinese.txt,内容为

代码语言:javascript
复制
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 很诡异的提示!!!

如果我们一直去数列数,这是怎么都不会发现问题的。考虑到大多数程序语言对非英文支持不好,考虑是编码格式问题。

代码语言:javascript
复制
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:指定编码格式

正确的读了进来

代码语言:javascript
复制
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毫无压力。

代码语言:javascript
复制
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

需要手动指定编码格式

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信宝典 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决方案1:指定编码格式
  • 解决方案2:用readr包里面的read_tsv
  • 解决方案3:用data.table包里面的fread
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档