5

ここで説明されているように、as.ffdfを使用して、data.frameをffオブジェクトに変換したいと思います

df.apr=as.data.frame(df.apr) # from data.table to data.frame
cols=df.apr[1,] 
cols=sapply(cols,class)
df_apr=as.ffdf(df.apr,vmode=cols)

エラーが発生します:

Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered,
: vmode 'numeric' not implemented

'vmode' 引数を指定しないと、次のエラーが表示されます。

Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered, 
: vmode 'character' not implemented

ただし、テーブルに書き込んでから ff に直接読み込むことはできます。

write.table(df.apr,file='df_apr.txt',sep='\t',row.names=F)
df.apr.ff=read.table.ffdf(file='df_apr.txt',header=F,VERBOSE=T)

しかし、これには時間がかかります [そして不器用です]。より良い方法はありますか?

4

1 に答える 1

9

ff で使用できるすべての vmode を知りたい場合は、コンソールで次のように入力します。

require(ff)
.vimplemented

これらには数値モードと文字モードがないことがわかります。数値は double に、文字は約数に変換されます。したがって、あなたの質問では、vmodes を自分で指定する必要はありません。文字が因子としてコーディングされている限り、data.frame で as.ffdf を使用できます。したがって、これは機能します。

df.apr=as.data.frame(df.apr, stringsAsFactors=TRUE)
df_apr=as.ffdf(df.apr)

ご参考までに。データがフラット ファイルから取得されている場合は、read.table.ffdf の使用を検討してください。SQL データ ソースから取得されている場合は、ETLUtils パッケージの read.dbi.ffdf または read.odbc.ffdf を使用できます。Hive を介して Hadoop から取得する場合は、ETLUtils パッケージの read.jdbc.ffdf を使用できます。

于 2013-06-24T12:13:31.997 に答える