将ff对象转换为data.frame

Chi*_*ika 5 r matrix bigdata dataframe ff

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

例如,我有一个ff_matrix(称为Mat,具有25行和7303列),它是降水预测(7303代表天数(约20年),而25是一天的25次降水模拟)。我还有一个ff_array,其中包含这20年的观测值(称为Obs,具有7303值)。

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

对于此代码:

ensembleBMA(Mat,Obs)
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

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
Run Code Online (Sandbox Code Playgroud)

我尝试了其他选项,例如:

as.data.frame(Mat)
as.matrix(Mat)
transform.ffdf(as.ffdf(Mat))
Run Code Online (Sandbox Code Playgroud)

我总是有这些错误:

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)
Run Code Online (Sandbox Code Playgroud)

要么

opening ff /tmp/RtmpWrlY4n/clone9d3376b435.ff Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered,  : write error
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?

Jan*_*aan 4

我们首先将您的数据转换ff_array为数组并将其转换为 a 的一种方法data.frame

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

或者首先将您的转换ff_array为 anffdf并将其转换为 an data.frame

 as.ffdf(Mat)[,]
Run Code Online (Sandbox Code Playgroud)

或者

as.data.frame(as.ffdf(Mat))
Run Code Online (Sandbox Code Playgroud)

最后两个解决方案似乎比第一个慢得多。这可能与大量的列有关,这会降低速度,as.ffdf从而创建 7303 个文件。

好像没有as.data.frame.ff_array