太久没有用read.table这个函数了,以至于对一些参数就不太熟悉,今天处理数据的时候遇到这个问题,写个记录,方便以后遇到同样问题时,及时检索到解决方法
1. 问题
问题2. 解决办法
先在网上检索了一下解决办法,搜到了这个博客,参考其解决的
R语言read.table的用法以及报错line 6 did not have 15 elements 读取的项目数必需是列数的倍数
在看了下read.table的参数解读
其中我这次明白的两个参数是
第一个参数是quote 参数
the set of quoting characters. To disable quoting altogether, use quote = ""
. Quoting is only considered for columns read as character, which is all of them unless colClasses
is specified.
默认情况下,字符串可以被 " 或 ’ 括起,并且两种情况下,引号内部的字符都作为字符串的一部分。有效的引用字符(可能没有)的设置由参数 quote 控制。对于sep = “\n”,默认值改为 quote = “”。
我猜想我的数据可能是因为列里面分别有" 或者‘ 两列弄成1了,所以报错2804行没有8个元素,但是我去找原始数据,没有看到
第二个参数是comment.char 参数
默认情况下,read.table 用 # 作为注释标识字符。如果碰到该字符(除了在被引用的字符串内),该行中随后的内容将会被忽略。只含有空白和注释的行被当作空白行。如果确认数据文件中没有注释内容,用
comment.char = “” 会比较安全 (也可能让速度比较快)
总结下来就是
若报错读取的项目数必需是列数的倍数 有可能是没写fill = T
若报错line 6 did not have 15 elements 有可能是没写quote=""
3. 代码
rm(list = ls())
filenames <- list.files(pattern = ".txt")
rat_exp <- c()
for (i in filenames){
temp <- read.table(i, row.names = NULL, header = T, sep = "\t", stringsAsFactors = F,
comment.char = "", quote ="")
rat_exp <- cbind(rat_exp, temp[ ,8])
}
rownames(rat_exp) <- temp$Gene.Symbol
colnames(rat_exp) <- gsub(".txt", "", filenames)
rat_exp <- as.matrix(rat_exp)
网友评论