我正在使用大矩阵和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
有人有想法吗?
答案 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
。