Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免在R包drake中为目标保存缓存_R_Drake R Package - Fatal编程技术网

避免在R包drake中为目标保存缓存

避免在R包drake中为目标保存缓存,r,drake-r-package,R,Drake R Package,我看到默认情况下,R包drake保存每个目标的所有缓存。有时,目标只是从上一个目标中选择一些列,但如果数据非常大,这意味着您将获得两个保存的目标,它们非常大。此外,如果您稍微更改一个目标,我认为drake会保存此目标的新副本,但会保留以前的副本。这意味着每次调用r\u make都会持续地保存缓存,从而积累大量内存 有没有办法选择drake保存哪些目标 有没有办法避免保留目标缓存文件的历史记录 这种累积在我的机器中占据了超过45GB的空间,这似乎太离谱了 谢谢高效的数据格式 首先,如果你的目标

我看到默认情况下,
R
drake
保存每个目标的所有缓存。有时,目标只是从上一个目标中选择一些列,但如果数据非常大,这意味着您将获得两个保存的目标,它们非常大。此外,如果您稍微更改一个目标,我认为
drake
会保存此目标的新副本,但会保留以前的副本。这意味着每次调用
r\u make
都会持续地保存缓存,从而积累大量内存

  • 有没有办法选择drake保存哪些目标
  • 有没有办法避免保留目标缓存文件的历史记录
这种累积在我的机器中占据了超过45GB的空间,这似乎太离谱了

谢谢

高效的数据格式

首先,如果你的目标是数据帧(或者<代码>数据>表>代码> s,考虑使用自定义的“FST”(或“FSTYDT”)格式保存这些目标:目标将占用更少的空间并节省更多的时间。很快就赢了

目标应该是什么? 其次,让我们谈谈您提出的两个目标没有那么大区别的场景

库(德雷克)
图书馆(dplyr)
德雷克图(
raw=获取原始数据(),
数据=选择(-funds)%>%
过滤器(消耗<900),
分析=分析(数据)
)
#>#tibble:3 x 2
#>目标命令
#>                                          
#>1原始获取原始数据()
#>2数据选择(-funds)%%>%过滤器(支出<900)
#>3分析(数据)
由(v0.3.0)于2019年10月22日创建

raw
data
基本上是彼此的副本,而且它们很大。如果您只使用
raw
计算
数据
,我们可以跳过
raw
,定义自己的函数直接转到
数据
。以下计划将使用更少的存储空间

库(德雷克)
图书馆(dplyr)
获取数据%
选择(-funds)%>%
过滤器(小于900)
}
德雷克图(
数据=获取数据(),
分析=分析(数据)
)
#>#tibble:2x2
#>目标命令
#>               
#>1数据获取_数据()
#>2分析(数据)
由(v0.3.0)于2019年10月22日创建

以这种方式定义和使用函数是一种很好的做法。这不仅有助于你对选择的目标更具战略性,还使你的计划更容易阅读

要想弄清楚什么是目标,什么是进入目标内部的步骤,需要仔细考虑。理想的目标是

  • 大到足以消耗大量的运行时间
  • 足够小以至于
    make()
    倾向于跳过它,并且
  • 对你的项目有意义
  • 列选择通常太快,无法证明创建一个全新的目标是正确的

    管理缓存
    drake的缓存在后端使用,后端不存储重复的对象。但是,它确实会存储旧目标,您很可能会尝试使用
    make(recover=TRUE)
    来恢复它们。但是如果您的缓存变得太大,您可以通过垃圾收集删除这些历史目标,可以使用
    drake\u gc()
    drake\u cache()$gc()

    减轻存储负担的其他技巧包括
    make()
    中的
    history=FALSE
    log\u progress=FALSE
    ,以及
    recoverable=FALSE
    。最后这些并不会使总体存储大小减少很多,但会减少缓存中的小文件数量

    关于内存,手册中有一章:。为了减少会话内存消耗,您可以选择自定义内存策略,并在
    make()

    高效数据格式中选择
    garbage\u collection=TRUE

    首先,如果你的目标是数据帧(或者<代码>数据>表>代码> s,考虑使用自定义的“FST”(或“FSTYDT”)格式保存这些目标:目标将占用更少的空间并节省更多的时间。很快就赢了

    目标应该是什么? 其次,让我们谈谈您提出的两个目标没有那么大区别的场景

    库(德雷克)
    图书馆(dplyr)
    德雷克图(
    raw=获取原始数据(),
    数据=选择(-funds)%>%
    过滤器(消耗<900),
    分析=分析(数据)
    )
    #>#tibble:3 x 2
    #>目标命令
    #>                                          
    #>1原始获取原始数据()
    #>2数据选择(-funds)%%>%过滤器(支出<900)
    #>3分析(数据)
    
    由(v0.3.0)于2019年10月22日创建

    raw
    data
    基本上是彼此的副本,而且它们很大。如果您只使用
    raw
    计算
    数据
    ,我们可以跳过
    raw
    ,定义自己的函数直接转到
    数据
    。以下计划将使用更少的存储空间

    库(德雷克)
    图书馆(dplyr)
    获取数据%
    选择(-funds)%>%
    过滤器(小于900)
    }
    德雷克图(
    数据=获取数据(),
    分析=分析(数据)
    )
    #>#tibble:2x2
    #>目标命令
    #>               
    #>1数据获取_数据()
    #>2分析(数据)
    
    由(v0.3.0)于2019年10月22日创建

    以这种方式定义和使用函数是一种很好的做法。这不仅有助于你对选择的目标更具战略性,还使你的计划更容易阅读

    要想弄清楚什么是目标,什么是进入目标内部的步骤,需要仔细考虑。理想的目标是

  • 大到足以消耗大量的运行时间
  • 足够小以至于
    make()
    倾向于跳过它,并且
  • 对你的项目有意义
  • 列选择通常太快,无法证明创建一个全新的目标是正确的

    管理缓存
    drake的缓存在后端使用,后端不存储重复的对象。但是,它确实将旧目标存储在off c上