2012-04-13 48 views
0

我运行下面的代码比对文件像a1.txt and b1.txta2.txt and b2.txt,... a999.txt and b999.txt重复向量名

dostuff <- function(x) 
{ 
files <- list.files(pattern=paste('.', x, '\\.txt', sep='')) 
a <- read.table(files[1],header=FALSE) #file a1.txt 
G <- a$V1-a$V2 
b <- read.table(files[2],header=FALSE) #file b1.txt 
as.factor(b$V2) 
q <- tapply(b$V3,b$V2,Fun=length) 
H <- b$V1-b$V2 
model <- lm(G~H) 
return(model$coefficients[2],q) 
} 

results <- sapply(0:999,dostuff) 
Error in tapply(b$V3, b$V2, FUN = length) : arguments must have same length 

这我想是因为在对两个文件都没有头所以a有和bV1 V2 V3。 但是,当我通过0:3这样的小批量文件运行这个错误时,并没有出现这个错误,并且这些结果与我分别进行每次分析时的结果相同,因此需要手动清除整个代码的运行之间的环境。

我认为一旦文件从a1 b1运行到a10 b10及以上,就会出现问题。因为我认为循环会迷惑哪些文件选择。只要我运行a0 b0a9 b9,此问题就会消失。

最佳解决方案?

回答

2

我遇到过类似的问题,当我正在尝试处理没有预期数量的行的批处理文件时,我建议首先检查所有文件的尺寸,看看它们是否都同意。我的猜测是文件0-3都格式正确,但是[0,999]中的一些文件不是。

尝试检查,看看是否尺寸相同的所有文件:

dims2 <- list() 
dims3 <- list() 
doDims <- function(x){ 
    files <- list.files(pattern=paste('.', x, '\\.txt', sep='')) 
    a <- read.table(files[1],header=FALSE) #file a1.txt 
    G <- a$V1-a$V2 
    b <- read.table(files[2],header=FALSE) #file b1.txt 
    as.factor(b$V2) 
    dims2[x] <- dim(b$V2) 
    dims3[x] <- dim(b$V3) 
} 

然后你可以看到,如果所有的尺寸,的确,你所期望的。

+0

谢谢feff我发现问题,但不知道如何纠正它,也许你可以帮助。只要文件'a0.txt''b0.txt'运行到'a9.txt''b9.txt',循环就可以正常运行。但是,如果我去“a10”和“b10”,那么它会变得困惑。 – user1320502 2012-04-13 19:12:39

+0

不知道在没有更多细节的情况下会出现什么问题。这些文件是否存在?或者格式正确?我真的没有任何信息可以帮助到这里。 – 2012-04-13 19:41:00