我用的是大矩阵和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)我有一个错误:
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有人有主意吗?
发布于 2014-01-21 10:31:08
首先将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。
https://stackoverflow.com/questions/21253770
复制相似问题