如何在ff包的fpdf对象中进行算术运算
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 对象的第 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")
我有制作 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 对象的第 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")