为什么合并不适用于从ff_matrix转换的ffdf

时间:2013-12-16 04:55:43

标签: r memory-management matrix bigdata ffbase

为什么merge在以下情况下不起作用?它给出了错误`错误:

require(ff)
require(ffbase)


a <- ffbase:::as.ff_matrix.ffdf(as.ffdf(data.frame(matrix(rnorm(10),ncol=2))))
b <- ffbase:::as.ff_matrix.ffdf(as.ffdf(data.frame(matrix(rnorm(10),ncol=2))))

a <- as.ffdf(a)
b <- as.ffdf(b)

colnames(a) <- 1:2
colnames(b) <- 3:4

a$RN <- as.ff(1:5)
b$RN <- as.ff(1:5)

c <- merge(a,b,by="RN") #ERROR

但是,如果我不进行投射,它可以工作:

a <- as.ffdf(data.frame(matrix(rnorm(10),ncol=2)))
b <- as.ffdf(data.frame(matrix(rnorm(10),ncol=2)))

colnames(a) <- 1:2
colnames(b) <- 3:4

a$RN <- as.ff(1:5)
b$RN <- as.ff(1:5)


c <- merge(a,b,by="RN")

1 个答案:

答案 0 :(得分:0)

有趣。 merge.ffdf是ffbase的一部分,所以这应该可以工作,但显然在执行ffbase:::as.ff_matrix.ffdf时,PhysicalIsMatrix仍然是TRUE。这可能会破坏通用调度。

ffdf (all open) dim=c(5,3), dimorder=c(1,2) row.names=NULL
ffdf virtual mapping
   PhysicalName VirtualVmode PhysicalVmode  AsIs VirtualIsMatrix PhysicalIsMatrix PhysicalElementNo PhysicalFirstCol PhysicalLastCol PhysicalIsOpen
1             x       double        double FALSE           FALSE             TRUE                 1                1               1           TRUE
2             x       double        double FALSE           FALSE             TRUE                 1                2               2           TRUE
RN           RN      integer       integer FALSE           FALSE            FALSE                 2                1               1           TRUE

您能否在https://github.com/edwindj/ffbase/issues报告此问题。我会看看是否可以更改未导出的ffbase:::as.ff_matrix.ffdf。感谢。