繁体   English   中英

如何在ff包的ffdf对象中进行算术运算

[英]how to make arithmatic operations in ffdf object of ff package

我有脚本制作ffdf对象:

library(ff)
library(ffbase)

setwd("D:/My_package/Personal/R/reading")
x<-cbind(rnorm(1:100000000),rnorm(1:100000000),1:100000000)
system.time(write.csv2(x,"test.csv",row.names=FALSE))

system.time(x <- read.csv2.ffdf(file="test.csv", header=TRUE,         first.rows=1000, next.rows=10000,levels=NULL)) 

现在我想将x的列#1增加5。
为了执行这样的操作,我使用了ff包的方法'add()':

add(x[,1],5)

输出确定(第1列增加5)。 但是额外的RAM分配很麻烦-好像我在操作RAM中的整个数据帧,而不是ffdf对象。

因此,我的问题是在不增加额外RAM分配的情况下处理ffdf对象元素的正确方法。

我使用了块方法进行算术计算,而没有RAM额外的开销(请参阅问题部分中的初始脚本):

chunk_size<-100
m<-numeric(chunk_size)
chunks <- chunk(x, length.out=chunk_size)

system.time(
    for(i in seq_along(chunks)){
      x[chunks[[i]],][[1]]<-x[chunks[[i]],][[1]]+5
    }
)
x

现在,我将x对象的column#1的每个元素增加了5,而没有显着的RAM分配。

“ chunk_size”也调节块的数量->使用更多的块,则RAM开销较小。 但是可能会出现处理时间问题。

有关ffdf中的块的简短示例和说明如下:
https://github.com/demydd/R-for-Big-Data/blob/master/09-ff.Rmd

无论如何,很高兴听到其他方法。

您可以按照以下步骤做

require(ffbase)

x <- ff(1:10)
y <- x + 5
x
y

ffbase已计算出所有算术运算,请参阅help(“ +。ff_vector”)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM