0

みんな。

私がやろうとしていること

R で空の ff data.frame を作成します。

詳細

R で複数の csv ファイルを読み取り、それらをバインドして 1 つの大きな data.frame を作成したいと考えています。データが非常に大きいため、ff パッケージを使用しています。

これが私のコードです。

file_list = list.files(pattern="*.csv")
library(ff)
for(i in seq_along(length(file_list)){
  ffdf <- read.csv.ffdf(x=ffdf, file=file_list[i], header=T)
}  

ただし、次のエラーが発生しました。

Error in `rownames<-`(x, value) : 
  attempt to set 'rownames' on an object with no dimensions

Google と Stackoverflow でエラー メッセージを検索しましたが、有用な結果は得られませんでした。この問題に対処する方法を知っている人はいますか?

更新 (15/2/16)

次のコードは機能しました。

library(ffbase)
library(ff)
file_list = list.files(pattern="*.csv")
lst <- lapply(file_list, function(x) read.csv.ffdf(file=x,header=TRUE))
ff1 <- Reduce(function(x,y) ffdfappend(x,y, adjustvmode=F), lst)

最初はラッピーの列はこんな感じで、うまくいきませんでした。

lst <- lapply(file_list, read.csv.ffdf, header=TRUE)

鍵は書いていfile=ました。ff関数は属性を明示的に示す必要があるようです。(参考:ffパッケージを利用したテキストファイルのインポート)

皆さんのお陰で!

私の環境

  • Windows 7 ホーム プレミアム サービス パック 1
  • R スタジオ 0.98.1091
  • R バージョン 3.1.2 (2014-10-31)
4

1 に答える 1

0

複数のファイルから大きな ffdf オブジェクトを作成する場合は、

library(ffbase)
library(ff)
ff1 <- Reduce(function(x,y) ffdfappend(x,y, adjustvmode=F), lst)
dim(ff1) #from the example
#[1] 78  7

どこ

lst <- lapply(file_list, read.csv.ffdf, header=TRUE)

データ

からのサンプル データセットの使用?read.csv.ffdf

 x <- data.frame(log=rep(c(FALSE, TRUE), length.out=26),
   int=1:26, dbl=1:26 + 0.1
 , fac=factor(letters), ord=ordered(LETTERS)
 , dct=Sys.time()+1:26, dat=seq(as.Date("1910/1/1"), length.out=26, by=1))
 x <- x[c(13:1, 13:1),]
 csvfile <- tempPathFile(path=getOption("fftempdir"), extension="csv")
 write.csv(x, file=csvfile, row.names=FALSE)
 y <- read.csv(file=csvfile, header=TRUE)
 y
 cat("Read csv with header\n")
 ffx <- read.csv.ffdf(file=csvfile, header=TRUE)
 lst <- lapply(1:3, function(x) read.csv.ffdf(file=csvfile, 
       header=TRUE))
 dim(lst[[1]])
 #[1] 26  7
于 2015-02-08T06:09:31.450 に答える