R语言readLines函数不识别制表符\t分隔符问题求助
问题原因分析
核心错误点
你对readLines函数的sep参数作用理解有误:该参数的作用是定义行与行之间的分隔符,而非一行内部不同字段的分隔符。
你设置sep="\t"时,R会将制表符识别为行结束标记,而非字段拆分标记,因此最终读入的是完整的一行原始字符串,制表符也会原样保留,就出现了你看到的带\t的输出结果。
修复方案
方案1:保留逐行读取逻辑,读完后拆分字段
将readLines的sep参数改回默认的换行符\n(符合常规文本行分隔规则),读取到完整行内容后,用strsplit函数按制表符拆分字段即可,修改后代码参考:
processFile = function(filepath) { con = file(filepath, "r") while ( TRUE ) { # n=1表示每次读1行,warn=FALSE关闭空文件告警 line = readLines(con, n = 1, warn = FALSE) if (length(line) == 0 ) { break } # 按制表符拆分当前行的字段,unlist将列表转为向量方便调用 fields = unlist(strsplit(line, split = "\t")) print(fields) # 后续可以按索引取对应字段:fields[1]是第一列100026,fields[2]是序列以此类推 } close(con) }
方案2:直接读取全量制表符分隔文件(无需手写循环)
如果你的需求是读取整个制表符分隔文件转为结构化数据,直接用R内置的read.delim函数即可,该函数原生适配制表符分隔的文本文件,代码更简洁:
# header=FALSE表示文件没有表头,读入后默认列名为V1、V2、V3、V4 df <- read.delim(filepath, header = FALSE, sep = "\t", stringsAsFactors = FALSE)
内容的提问来源于stack exchange,提问作者xfrostyy
相关产品推荐
相关产品推荐

