0

Rで大きなCSVファイルを読み取るためにFFを使用しようとしています.

最初に csv.read を使用してコードの最初の 10 行を読み取り、愚かなことをしていないことを確認します。

trainFileName = "./TrainingSet/SplitFiles/7_train_data.csv"
trainSet <- read.csv(trainFileName, header=TRUE, nrows=10)
length(trainSet[1,])
length(trainSet[,1])

これは私に教えてくれます:

> trainFileName = "./TrainingSet/SplitFiles/7_train_data.csv"
> trainSet <- read.csv(trainFileName, header=TRUE, nrows=10)
> length(trainSet[1,])
[1] 4505
> length(trainSet[,1])
[1] 10

ここまでは順調ですね。今、私はFFでこの偉業を繰り返そうとしています:

trainSet <- read.csv.ffdf(file = trainFileName, header = TRUE, nrows = 10, VERBOSE = TRUE)

そして、ここで失敗します:

read.table.ffdf 1..10 (10)  csv-read=0.552sec
Error in if (dfile ==         getOption("fftempdir")) finalizer <- "delete" else finalizer <- "close" : argument is of length zero
Error in setwd(cwd) : character argument expected

このエラーに関するこれ以上の情報はどこにもありません。また、もっと簡単にできる方法もわかりません。FF のソースを詳しく調べる前に、何かアイデアはありますか?

最初の 10 行ではなく、ファイル全体をロードしようとしましたが、列のデータ型を指定すると、常に同じエラーが発生しました。

前もって感謝します。

4

1 に答える 1

0

はい、列が多すぎます。ff では、各列がファイルです。ファイルシステムが同時に開くことができるよりも多くのファイルを開くことはできません

開いているファイルが多すぎる場合に ff が失敗する場所を確認するには、次を実行します。

require(ff)
x <- list()
for(i in 1:100000){
  print(i)
  x[[i]] <- ff(rnorm(10))
  open(x[[i]] )
}

私の場合、これは 1022 個の開いているファイルで失敗しましたが、他にもいくつか開いていました。

于 2012-09-05T20:57:25.480 に答える