使用read_tsv()读取部分ONET数据文件时RStudio崩溃求助
解决read_tsv读取部分ONET文本文件导致RStudio崩溃的问题
问题描述
通过以下代码成功下载ONET官网的文本数据文件:
url_jobzones <- "https://www.onetcenter.org/dl_files/database/db_27_3_text/Job%20Zones.txt" jobzones_file_name <- "jobzones.txt" download.file(url_jobzones, destfile= paste("data/EdExTrain", jobzones_file_name, sep="/"))
文件可在Windows系统正常打开,但执行jobzones <- read_tsv("data/EdExTrain/jobzones.txt")时触发致命错误,导致RStudio崩溃。仅以下ONET文件出现该问题,其他文件(如Skills.txt)读取正常:
- Job Zones
- Basic Interests to RIASEC
- Tools Used
- Tasks to DWA
- Sample of Reported Titles
- Abilities to Work Activities
解决建议
1. 指定文件编码读取
这类崩溃多因编码不匹配导致,ONET部分文本文件可能采用UTF-16编码,而非read_tsv默认的UTF-8。尝试指定编码:
library(readr) jobzones <- read_tsv("data/EdExTrain/jobzones.txt", locale = locale(encoding = "UTF-16"))
若UTF-16无效,可尝试"Latin-1"或"Windows-1252"编码。
2. 换用基础R函数读取
如果readr包仍崩溃,改用基础R的read.delim读取后转换为tibble:
jobzones_raw <- read.delim("data/EdExTrain/jobzones.txt", sep = "\t", fileEncoding = "UTF-16") jobzones <- as_tibble(jobzones_raw)
3. 校验文件完整性
下载过程可能导致文件损坏,重新下载并核对文件大小:
# 重新下载(指定wb模式确保二进制传输) download.file(url_jobzones, destfile= "data/EdExTrain/jobzones.txt", mode = "wb") # 查看文件大小,db_27_3版本Job Zones.txt约为14KB file.size("data/EdExTrain/jobzones.txt")
4. 升级依赖包与软件
旧版本readr可能存在编码处理bug,升级至最新版:
install.packages("readr")
同时确保RStudio为最新版本,避免兼容性问题。
5. 逐行排查问题行
若以上方法无效,逐行读取定位崩溃的具体行:
# 读取所有行 con <- file("data/EdExTrain/jobzones.txt", encoding = "UTF-16") lines <- readLines(con) close(con) # 分批测试读取 for (i in seq(1, length(lines), 100)) { chunk_end <- min(i + 99, length(lines)) chunk <- lines[i:chunk_end] temp <- read_tsv(paste(chunk, collapse = "\n"), locale = locale(encoding = "UTF-16")) cat("Processed lines", i, "to", chunk_end, "\n") }
找到问题行后,可手动清理或跳过该行继续读取。
内容的提问来源于stack exchange,提问作者dietdrshredder
相关产品推荐
相关产品推荐

