![](/img/trans.png)
[英]How to overload the functions “[<-.ffdf” and “[.ffdf” from package ff (in R)?
[英]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.