我在a1.txt and b1.txt
,a2.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
有V1 V2
而b
有V1 V2 V3
。
但是,当我在0:3
这样的小批量文件上运行此错误时,不会出现此错误,并且这些错误的结果与我单独执行每个分析时的结果相同,从而在手动运行整个代码之间清除环境。 / p>
我相信一旦文件从a1 b1
运行到a10 b10
及更高版本,就会出现问题。因为循环我认为对选择哪些文件感到困惑。只要我使用a0 b0
与a9 b9
一起运行,此问题就会消失。
最佳解决方案?
答案 0 :(得分: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)
}
然后你可以看到所有尺寸是否确实是你所期望的。