0

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

これは、ペアの両方のファイルにヘッダーがないため、ahasV1 V2bhas V1 V2 V3. ただし、このようなファイルの小さなバッチに対してこれを実行すると、このエラーは発生しません0:3。これらの結果は、すべての分析を個別に行った場合と同じになり、コード全体の実行間で環境を手動でクリアします。

ファイルがa1 b1toa10 b10以上から実行されると問題が発生すると思います。私が考えるループは、どのファイルを選択するかについて混乱するからです。a0 b0toで実行している限り、この問題はなくなりa9 b9ます。

最善の解決策は?

4

1 に答える 1

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)
}

次に、すべての寸法が実際に期待どおりであるかどうかを確認できます。

于 2012-04-13T14:56:00.490 に答える