2

我一直在尝试使用 memoise 来加快我编写的函数的计算速度。

简而言之,我有一个在另一个函数a()上执行的函数。函数运行代码以读取过去一年的文件,然后执行一些计算。do.call()b()b()

因此,如果您想在 2019 年 1 月 12 日、2019 年 2 月 12 日、2019 年 3 月 12 日运行a(),则将b()在 1/12、2/12、3/12 之前读取一年的文件。例如,1/12/19 读取的文件将在 1/12/18 到 1/12/19 之间,2/12/2019 读取的文件将在 2/12/2018 和 2/12/2019 之间。b()本质上,读取的文件会有很多重叠。因此,记住使用的fread()函数本质上是理想的b()

我在下面写了一个示例函数

b<-function(){

##ideally would want to memoise it this way

if(!is.memoised(fread))

##fread=memoise(fread)

fread(...)
}
a<-function(){
do.call(b())
}

因此,经过许多痛苦的时间后,我发现这在理论上是行不通的,因为记忆功能有一个与可以调用多少次有关的约束——即,如果它被多次调用,那么它就不会记住以前的函数参数被先前记忆的 使用fread(),基本上消除了功能的有用性)

  1. 我怀疑它与记忆函数的范围有关,每次b()调用它都会再次记忆 fread
  2. 我试图实现<<-记忆 fread,但我认为我没有以正确的方式实现它,因为它抛出了一个错误,说“无法修改 fread”
  3. fread在全球环境中进行记忆会有所帮助吗?同样,我无法以正确的方式实施它
  4. 我对这些功能和记忆的思考方式是否有很长的路要走?

任何输入将不胜感激。

4

0 回答 0