我想将data.frame转换为ff对象,使用here描述的as.ffdf

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)

但这很费时间(而且笨拙)。
有没有更好的办法?

最佳答案

如果您想知道可以在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。

关于r - 将data.frame转换为ff,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17251064/

10-12 18:55