2014-01-21 94 views
4

我正在使用大矩阵和ff包。 我正在加载一个ff对象,我想用它来计算一个crps(一个分数)。例如,我有一个ff_matrix(称为Mat,有25行7303列),这是一个降水预报(7303代表天数(大约20年),25代表25天的降水模拟)。我还有一个ff_array,包含这20年的观察结果(称为Obs和7303的值)。将ff对象转换为data.frame

随着包合奏BMA我想计算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 

是否有人有想法?

+0

从什么时候开始是25 * 7303认为大? – Roland

+0

因为我有20万像这样的矩阵 – Chika

回答

2

一种方法我们先转换您ff_array到一个数组,将其转换成一个data.frame

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

或先转换您的ff_arrayffdf,转换至一个data.frame

as.ffdf(Mat)[,] 

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

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

似乎没有as.data.frame.ff_array