我们有一个文件,里面写了一些中文信息,命名为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
很诡异的提示!!!
如果我们一直去数列数,这是怎么都不会发现问题的。考虑到大多数程序语言对非英文支持不好,考虑是编码格式问题。
代码语言: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
毫无压力。
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