将ff对象转换为data.frame

时间:2014-01-21 09:18:11

标签: r matrix dataframe bigdata ff

我正在使用大矩阵和ff包。 我正在加载一个ff对象,我想用它来计算一个crps(一个分数)。

例如,我有一个ff_matrix(称为25行和7303列的Mat),这是一个降水预报(7303代表天数(约20年),25天是25天的降水模拟)。我还有一个ff_array来观察这20年的观察结果(称为Obs和7303值)。

使用包ensembleBMA我想计算CRPS。我需要将我的ff_matrix和我的ff_array放在一个“ensembleBMA”对象中(实际上这是一个data.frame)。

对于此代码:

ensembleBMA(Mat,Obs)

我有这个错误:

Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class 'c("ff_matrix", "ff_array", "ff")' into a data.frame

我尝试了不同的选项,例如:

as.data.frame(Mat)
as.matrix(Mat)
transform.ffdf(as.ffdf(Mat))

我总是有这些错误:

Error in as.data.frame.default(Mat_Ptot_212_1) : cannot automatically convert class  'c("ff_matrix", "ff_array", "ff")' into a data frame (data.frame)

opening ff /tmp/RtmpWrlY4n/clone9d3376b435.ff Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered,  : write error

有人有想法吗?

1 个答案:

答案 0 :(得分:3)

我们首先将ff_array转换为数组并将其转换为data.frame的一种方式:

Mat <- ff(1, vmode="double", dim=c(25, 7303))
as.data.frame(Mat[,])

或首先将您的ff_array转换为ffdf并将其转换为data.frame

 as.ffdf(Mat)[,]

as.data.frame(as.ffdf(Mat))

最后两个解决方案似乎比第一个慢得多。这可能与大量的列有关,这些列会减慢必须创建7303文件的as.ffdf

似乎没有as.data.frame.ff_array