为啥合并对从 ff_matrix 转换的 ffdf 不起作用
Posted
技术标签:
【中文标题】为啥合并对从 ff_matrix 转换的 ffdf 不起作用【英文标题】:Why merge does not work on ffdf casted from ff_matrix为什么合并对从 ff_matrix 转换的 ffdf 不起作用 【发布时间】:2013-12-16 04:55:43 【问题描述】:为什么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")
【问题讨论】:
主要问题是:你为什么要merge
在这里?你已经在这里问了一个类似的问题。 ***.com/questions/20602908/…
这与虚拟和物理属性有关。在这两种情况下运行物理(a)...
【参考方案1】:
有趣。
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
。谢谢。
【讨论】:
以上是关于为啥合并对从 ff_matrix 转换的 ffdf 不起作用的主要内容,如果未能解决你的问题,请参考以下文章