我有制表符分隔的文本文件。每个文件都有三列 - ProbeID
,Avgsignalintenities
,Pvalue
。在进一步分析之前,我想确保ProbeID
列中的数据正确无误。每个文件中的ProbeID
列包含大约47,315个值,因此我关注性能。我已经包含了在Excel中打开的单个文件的屏幕截图。有效文件应该只有47,234个ProbeID。
如果您想了解更多信息,我可以立即为您提供。
我已经在r代码中给出了最少的信息。我有4个文件,其中file1的长度为10,而其他的是7,我想将所有这些文件一起传递到一个函数中并检查它们是否都是相同的长度..if not它应该返回一个特定文件(即文件1)长度不等的消息
file1=list(ProbeID=c(360450,1690139,5420594,3060411,450341,5420324,730162,4200739,1090156,7050341),X1234Avgintensity=c(110.3703,469.5097,407.557,123.9965 ,2234.529,190.7429,110.072,314.7892,153.486,160.4385),X1234Pvalue=c(0.8424522,0.01054713,0.01450231,0.5800923,0,0.1437047,0.8477257,0.02900461,0.286091,0.2406065))
file2=list(ProbeID=c(360450,1690139,5420594,3060411,450341,5420324,730162),X3456Avgintensity=c(110.3703,469.5097,407.557,123.9965,2234.529,190.7429,110.072),X3456Pvalue=c(0.8424522,0.01054713,0.01450231,0.5800923,0,0.1437047,0.8477257))
file3=list(ProbeID=c(360450,1690139,5420594,3060411,450341,5420324,730162),X678Avgintensity=c(66.78696,160.4022,207.996,80.48443,1187.988,91.58123,85.80681),X678Pvalue=c(0.9538563,0.02768622,0.01450231,0.6031641,0,0.313118,0.444298))
file4=list(ProbeID=c(360450,1690139,5420594,3060411,450341,5420324,730162),X8701Avgintensity=c(83.57081,141.5529,238.9153,98.10896,1060.654,97.65002,83.88175),X8701Pvalue=c(0.814766,0.03493738,0.005273566,0.3651945,0,0.3750824,0.808174))
答案 0 :(得分:2)
我不认为47,315行特别大。所以我会这样做:
f1
f1
中的正确列进行比较。记下有效的文件。循环浏览文件时,这里有一些提示:
f3
,f4
,f5
。在任何时候,您应该只有f1
和一个比较数据集。这样可以节省内存。read.csv
函数中,查看colClasses
参数。查看示例数据集,colClasses=c("numeric", "numeric", "numeric")
之类的内容应该可行。这样可以在读取数据时更快。<强>更新强>
在编辑你的问题之后,你似乎对特定文件的行数感兴趣,所以这里有一些伪代码可以帮助你:
fnames = list.files()
no_of_lines = numeric(length(fnames))
for(i in seq_along(fnames) {
d = read.delim(fnames[i])
no_of_lines[i] = dim(d)[1]
}
然后,您可以在plot
table
或no_of_lines
答案 1 :(得分:1)
system.time
或其中一个性能分析包来查看每个文件的读取时间read.delim
。如果它确实需要太长时间,那么请参阅这个问题,了解如何加快速度。
答案 2 :(得分:0)
您使用read.delim()
读取制表符分隔的文件,它与read.table()
和read.csv()
相同,但默认设置除外,它们设置为\t
作为分隔符。
例如,
my.data <- read.delim('c:/path/to/my/file.txt')
获得数据后,您可以使用
计算行数nrow(my.data)
如果检查有效性只是检查行数是47,234那么你可以做这样的事情
if(nrow(my.data) == 47234L) {
do.something()
} else {
do.something.else()
}
但是,您可能希望检查不同的ProbeID,因此您可以执行此操作
length(unique(my.data$ProbeID)) == 47234L
但是,如果您需要检查是否存在47,234个ProbeID的某个列表,则必须将该列表放在已加载或已定义的位置以进行检查。请参阅@ csgillespie的回答,因为我认为这就是他要去的地方。
至于性能,如果你可以在Excel中加载它,你可以更快地加载它。