簡體   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