【问题标题】:How to delete ffdf objects directories in R?如何删除R中的ffdf对象目录?
【发布时间】:2015-04-08 02:20:34
【问题描述】:

我正在使用ffdf 包进行一些数据预处理。我的工作计算机有 4 个 CPU 内核和 8 Gb 的 RAM,我可以处理大约 0.2-3 亿个数据点,这真是太棒了。

但是,我还有另一个限制。大的ffdf 对象占用了我计算机的磁盘空间。当我将 5 个表合并为一个,并在其上添加 20 列时,我收到了一条消息 "no disk space"

所以,我想删除磁盘驱动器上未使用的 ffdf 对象。我可以在不退出 R 会话的情况下执行此操作吗? (我对该文件夹具有读、写和执行权限。)

我已经尝试了所有我知道的东西,比如unlink()file.remove()delete()close()finalize()finalizer()ffdrop()"。

delete_dir <- "d:/ff/t1_pre"
deletephrase <- "t1_pre"
id <- grep(deletephrase, dir(delete_dir))
todelete <- dir(delete_dir, full.names=T)[id]
todelete
# [1] "d:/ff/t1_pre/t1_pre$b_cnt.ff"     "d:/ff/t1_pre/t1_pre$b_rct.ff"     "d:/ff/t1_pre/t1_pre$b_weit.ff"   
# [4] "d:/ff/t1_pre/t1_pre$deal_id.ff"   "d:/ff/t1_pre/t1_pre$m_id.ff"      "d:/ff/t1_pre/t1_pre$saled_qty.ff"

unlink(todelete)  #only delete .rdata and .rprofile

file.remove(todelete)
# [1] FALSE FALSE FALSE FALSE FALSE FALSE
# Warning messages:
# 1: In file.remove(todelete) :
#   cannot remove file 'd:/ff/t1_pre/t1_pre$b_cnt.ff', reason 'Permission denied'
# 2: In file.remove(todelete) :
#   cannot remove file 'd:/ff/t1_pre/t1_pre$b_rct.ff', reason 'Permission denied'
# 3: In file.remove(todelete) :
#   cannot remove file 'd:/ff/t1_pre/t1_pre$b_weit.ff', reason 'Permission denied'
# 4: In file.remove(todelete) :
#   cannot remove file 'd:/ff/t1_pre/t1_pre$deal_id.ff', reason 'Permission denied'
# 5: In file.remove(todelete) :
#   cannot remove file 'd:/ff/t1_pre/t1_pre$m_id.ff', reason 'Permission denied'
# 6: In file.remove(todelete) :
#   cannot remove file 'd:/ff/t1_pre/t1_pre$saled_qty.ff', reason 'Permission denied'

ffdrop("d:/ff/t2_pre/t2_pre$c_cnt.ff")
# $RData
# d:/ff/t2_pre/t2_pre$c_cnt.ff.RData 
#                              FALSE 

# $ffData
# d:/ff/t2_pre/t2_pre$c_cnt.ff.ffData 
#                               FALSE 

# Warning messages:
# 1: In file.remove(imgfile) :
#   cannot remove file 'd:/ff/t2_pre/t2_pre$c_cnt.ff.RData', reason 'No such file or directory'
# 2: In file.remove(zipfile) :
#   cannot remove file 'd:/ff/t2_pre/t2_pre$c_cnt.ff.ffData', reason 'No such file or directory'

finalize(t2_pre)
# $m_id
# [1] FALSE

# $deal_id
# [1] FALSE

close(t2_pre)
# [1] FALSE

finalizer(t2_pre)
# Error in UseMethod("finalizer") : 
#   no applicable method for 'finalizer' applied to an object of class "ffdf"

delete(t2_pre)
# [1] FALSE
# Warning messages:
# 1: In file.remove(attr(physical, "filename")) :
#   cannot remove file 'd:/ff/t2_pre/t2_pre$m_id.ff', reason 'Permission denied'

【问题讨论】:

    标签: r ff


    【解决方案1】:

    您首先需要关闭您的 ff 文件,然后才能执行 file.remove。 close(yourffdf)close(yourffobject) 和下一个 file.remove(list.files(yourpath), recursive=TRUE, full.names=TRUE) 之类的东西就可以了

    require(ff)
    x <- as.ffdf(iris)
    sapply(filename(x), file.remove) ## Will fail
    close(x)
    sapply(filename(x), file.remove) ## Works
    

    【讨论】:

    • 谢谢你的回答。我很感激你的回答。当我开始 ff 包时,它对我真的很有帮助。如果没有你们的cmets,我就找不到工作了。而且,我不能在数据分析部门工作。 ^^。非常感谢!!!!
    • 我已经执行了 close(ffdf) 和下一个 file.remove(list.files(path),recursive=T, full.names=T)。有时,这行不通。我不知道为什么。现在,我找到了。当我解决问题时,我会在这里写。
    • 您只能删除未打开的文件。如果您要删除打开的文件,您会收到一条 Permission denied 消息。因此,请确保您只删除如上例中关闭的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多