使用read.table指定colClasses时遇integer(n)向量大小NA/NaN错误
解决read.table读取数据时的
Error in integer(n) : vector size cannot be NA/NaN问题 我帮你排查下这个问题哈,这个错误通常是因为R没办法正确识别数据的列数,导致在创建对应类型的向量时参数异常。结合你要保留前导0的需求,咱们一步步来解决:
错误原因分析
你指定了前3列为字符型、剩余4列为数值型,那数据总列数应该是7列。但报错说明R读取时识别的列数和你设定的colClasses长度不匹配,或者分隔符、表头设置不对,导致列数识别失败,进而触发这个向量尺寸的错误。
具体解决方案
1. 先确认数据的基础信息
先读取少量数据,确认数据的列数、分隔符、是否有表头,避免后续参数设置错误:
# 读取前5行数据,不指定列类型,先探探底 temp_data <- read.table('https://gist.githubusercontent.com/duhaime/46dde948263136d0b52be1575232a83e/raw/80f14650e4f4b9ef38a5dec3f5bbb8c62954...', nrows = 5, header = TRUE, # 如果数据第一行是表头就设为TRUE,否则FALSE sep = "\t") # 假设是制表符分隔,实际如果是逗号就改成"," # 查看列数,应该是7列 cat("数据总列数:", ncol(temp_data), "\n")
2. 正确设置参数读取完整数据
确认列数确实是7之后,用正确的colClasses参数读取,同时注意其他参数匹配数据格式:
df.img <- read.table('https://gist.githubusercontent.com/duhaime/46dde948263136d0b52be1575232a83e/raw/80f14650e4f4b9ef38a5dec3f5bbb8c62954...', header = TRUE, # 和上面的设置一致 sep = "\t", # 匹配实际的分隔符 colClasses = c(rep("character", 3), rep("numeric", 4)), stringsAsFactors = FALSE) # 防止字符列被自动转成因子类型
3. 验证前导0是否保留
读取完成后,可以检查第2、3列的内容,确认前导0没有丢失:
# 查看前几行的第2、3列 head(df.img[, c(2, 3)])
额外注意点
- 如果数据里有大量缺失值,可以加上
na.strings = c("", "NA")参数,让R正确识别缺失值,避免列数识别错误; - 如果数据是CSV格式,用
read.csv会更方便,它默认sep=",",参数设置逻辑和read.table一致。
内容的提问来源于stack exchange,提问作者duhaime
相关产品推荐
相关产品推荐

