2016-11-26 84 views
1

我有一系列文件,当我读取它们并单独操作它们时,我没有问题。R导入多个文件并对它们执行复杂的功能

它们组织如下:

例如,

chrY<-read.table('chrY.txt', sep ='', header=F) 
head(chrY) 
     V1 
1 4.514563 
2 4.543689 
3 4.553398 
4 4.533981 
5 4.495146 
6 4.514563 

我需要每个值转换为数字:

所以我尝试一下本作的染色体文件列表:

temp = list.files(pattern="chr*.txt") 
for (i in 1:length(temp)) assign(temp[i], read.table(temp[i], sep ='', header=F)) 
> temp 
[1] "chr17.txt" "chr18.txt" 
[3] "chr19.txt" "chr1.txt" 
[5] "chr6.txt" "chrY.txt"  

转换为数学运算:

for(i in temp){ 
    temp[i]<-as.numeric(temp[i]) 
} 

我想绘制所有文件的平均值并绘制它们,

绘制一个导入的文件是罚款:

plot(chrY.txt[,1]) 

我试图在如下他们之间的所有绘制平均值:

for(i in length(temp)-1){ #index -1 such that iteration is not out of range 
x<-(temp[i][,1]+temp[i+1][,1])/length(temp) 
} 
plot(x) 
然而

的平均化过程中,我得到以下错误:

Error in temp[i][, 1] : incorrect number of dimensions

有没有更快的方式做到这一点比R for循环?这是一个实践运行,我将可能进口了大量文件,平均增幅超过

+0

你有'length(temp)-1',它只是一个单独的值,可能你需要'seq(length(temp)-1)'最后一个代码的第二个问题是'temp'是一个对象名称的向量,你必须阅读它(就像你在第一个代码块中做的那样),然后做一个总结 – akrun

+0

谢谢@akrun在包含'seq()'的情况下尝试了它,但得到了同样的错误:你能在下半部分的指示中更清楚吗?只要我能看到第一块代码正在访问矢量,就像第二块一样... –

+0

你需要读它'read.table(temp [i],sep ='',header = F) ' – akrun

回答

0

我们可以在list读取这些文件,然后使用Reduce+再除以listlength得到mean

temp <- list.files(pattern="chr*.txt") 
lst <- lapply(temp, read.table, header=FALSE) 
Reduce('+', lst)/length(lst) 
相关问题