我一直在尝试使用 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()
,基本上消除了功能的有用性)
- 我怀疑它与记忆函数的范围有关,每次
b()
调用它都会再次记忆 fread - 我试图实现
<<-
记忆 fread,但我认为我没有以正确的方式实现它,因为它抛出了一个错误,说“无法修改 fread” fread
在全球环境中进行记忆会有所帮助吗?同样,我无法以正确的方式实施它- 我对这些功能和记忆的思考方式是否有很长的路要走?
任何输入将不胜感激。