R读取txt文件出现Error in make.names(col.names, unique = TRUE)报错如何解决
R读取外部文本数据集触发make.names报错的修复方案
报错信息中文翻译:执行
make.names(col.names, unique = TRUE)函数时发生错误
该报错的触发原因是R读取表格数据时,默认会调用make.names函数将原始列名转换为符合R语法规范的合法格式,当原始列名存在重复、包含非法特殊字符,或读取时分隔符识别错误导致列名解析混乱时,就会触发该报错。可通过以下方法修复:
方案一:关闭列名校验逻辑
直接在读取函数中添加check.names = FALSE参数,跳过R自动转换列名的步骤,不会触发make.names调用,适合接受保留原始列名的场景,示例代码:df <- read.table( "http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5410/data/wastes.txt", header = TRUE, sep = "\t", check.names = FALSE, stringsAsFactors = FALSE )方案二:手动处理列名保证合法性
若需要保留列名的合法性,可先不读取表头,手动处理列名后再赋值,避免自动解析报错,示例代码:# 读取全量数据,暂不设置表头 raw_df <- read.table( "http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5410/data/wastes.txt", header = FALSE, sep = "\t", stringsAsFactors = FALSE ) # 手动生成合法唯一列名 colnames(raw_df) <- make.names(as.character(raw_df[1, ]), unique = TRUE) # 移除原表头所在行 df <- raw_df[-1, ] # 自动转换各列数据类型 df[] <- lapply(df, type.convert, as.is = TRUE)
如果读取后仍存在列数不对的问题,可调整sep参数匹配数据集实际的分隔符,常见可选值为空格" "、制表符"\t"、逗号",等。
内容的提问来源于stack exchange,提问作者Jennie C.
相关产品推荐
相关产品推荐

