问题标签 [memoise]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
104 浏览

r - 缓存 read_html

我试图缓存read_html/xml2以避免在开发过程中淹没服务器

这失败了,因为只有外部指针存储在文件中,重新运行时不再有效。当我使用memoiseon时也会出现同样的问题read_html

0 投票
0 回答
142 浏览

r - R:如何在 Shiny 中将项目缓存在内存中?

我目前遇到缓存项目以在 Shiny(R 中)中使用的问题,并且想知道这样做的正确方法。一个例子是我需要使用 readRDS 加载一个大的 data.table,然后以各种方式切片和切块,并创建许多图表。我可以通过使用轻松缓存文件加载

但是,当我尝试缓存计算结果时,我发现了问题。如果我有

然后 memoise-ing f 似乎没有帮助,因为我看到第一次和后续调用之间没有加速并且非常相似的时间表明没有发生缓存。

这是 memoise 的已知缺点吗?是否有任何其他缓存库我可以使用来解决问题

设计模式?也就是说,如果 param1 和 param2 是大型复杂数据类型,那么制定密钥很耗时和/或可能不会正确发生。

在这种情况下,我真的想要更多的设计

基于内存的缓存是我理想的追求,因为基于文件的缓存在网络环境中对于我正在做的事情来说太慢了。

0 投票
1 回答
37 浏览

r - 使用 memoise 加载当前缓存

假设我已经运行了一个返回整数输出的记忆函数。现在,我不知道用于存储当前缓存的输入是什么。如果使用 memoise 包,有什么方法可以获取已缓存的当前整数输出?

下面是一些简约的代码:

现在假设由于某种原因,我丢失了变量a并且不记得fn_mem使用输入参数运行5但仍然需要知道fn_mem运行时的输出是什么。

在这种情况下是否可以获得当前缓存的结果?

0 投票
1 回答
41 浏览

reactjs - Memoize 和 lodash 时间获取索引,创建唯一的文本输入

我有一个带有加号的图标按钮。每次单击它时,我都会创建一个文本输入。我简化了示例中的代码,但在我的项目中,我尝试使用它来创建社交图标,在每个文本输入中添加社交图标名称/或 url。代码是 React 中的 JSX:

问题:正在创建相同的文本输入。有没有办法将索引或映射添加到 memoize/times 以呈现唯一输入?

0 投票
0 回答
86 浏览

r - 如何在 R 中使用备忘录

我一直在尝试使用 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()

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

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

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

任何输入将不胜感激。

0 投票
1 回答
64 浏览

r - 需要检查 memoised 包功能以使 memoisation 工作

假设我有一个具有以下功能的包:

每次运行的函数值总是相同的,所以我想使用记忆。

我以为我可以简单地做

但是,这不起作用。

我的意思是,将它作为 GlobalEnv 函数运行,它可以工作:

reprex 包(v0.3.0)于 2019 年 12 月 23 日创建

但是,如果它在一个包中,我会得到非常奇怪的行为。基本上,记忆并没有发挥作用,我一直得到相同的成本。但是,如果我打印函数定义,它就会开始工作!

NAMESPACE作为记录,以下是和DESCRIPTION文件的相关部分:

这里发生了什么,我应该怎么做才能让我的包中的记忆从一开始就起作用?

0 投票
1 回答
208 浏览

r - 如何在 R 中的包启动时记住一个函数

我在一个包装 API 调用的 R 包上工作。为了减少实际调用的次数并加快速度,我记住了进行 API 调用的函数。为此,我创建了以下函数,它允许设置缓存目录:

要创建我使用的记忆功能

现在,由于我在我的包中多次需要 memoised 函数,我想在包启动时记住这个函数。我试过了

但我仍然需要跑步memoised_fromJSON <- memoise_fromJSON()才能让它工作。

所以我的问题是:

  1. 是否有可能在包启动时记住一个函数?
  2. 如果是这样,我怎样才能以在全局环境中不可见的方式记忆该功能?

我想,这些问题在某种程度上是相关的。我的理解是否正确,我的尝试.onLoad()不起作用,因为它在 的环境中创建了记忆功能.onLoad()


PS:我知道,我无法更改cache_dirat 包加载,但我想设置一个合理的默认值,这样就可以毫不费力地启动。但是,这保留了在需要时更改缓存目录的可能性。

0 投票
0 回答
47 浏览

r - Linux服务器上的R memoise

我正在测试 memoise 以在 R 闪亮的应用程序中缓存大数据帧。它在我的本地 Windows 机器上运行良好,但是一旦我在 Linux 服务器上部署代码,不知何故,memoise 似乎没有做任何事情,每次我尝试调用 memoise 函数时,它都需要永远加载。因此我的问题是:是否需要更改特定设置才能在 linux 服务器上有效运行?示例代码(真实代码从数据库加载数据帧并处理数据):

作为一个不太重要的问题,这里描述的超时功能(https://blog.rstudio.com/2016/02/02/memoise-1-0-0/)似乎也没有任何作用。

0 投票
0 回答
135 浏览

reactjs - 在我管理 SelectedKeys 时使用Memo 来记忆 Antd 的 Tree 组件

我正在使用Antd 的 Tree组件,它占据了我容器的左半部分,并且数据非常大。任何节点的 OnClick,我都会在容器内的右半部分呈现有关该节点的一些细节。因此,我将所有节点加载到一个节点上,并在 onClick 上维护一个状态变量,其中包含所单击节点的详细信息。现在由于数据很大,我认为记住这棵树的功能组件,我可以避免在节点的单击时重新渲染整个树,我可以使用 useMemo() 来实现,但是因为我使用管理节点的选择树的道具“ selectedKeys={props.selkeys} ”,选择不起作用,但我能够实现 onClick 重新渲染不会发生。那是因为 useMemo 如下所示

如果将 useMemeo 更改为也包含选定的键,则没有必要进行 memoize,因为它需要重新渲染,因为节点选择已更改:

由于这是现有代码,我不确定如何解决这个没有太大变化的问题。

我也对任何其他解决方案持开放态度,例如仅显示少量数据的方式,但请注意所有数据均以某种状态加载。但请提出任何更好的解决方案。

或者

请就如何在此树中使用无限滚动或其他此类组件提出建议。我不能,因为树只能有 TreeNodes。请指教。

TIA

0 投票
1 回答
17 浏览

r - 使用 R 函数初始化的缓存中的可用内存量:`memoise::memoise()`

我反复调用一个这样初始化的记忆函数:

我知道我可以memoised_func使用cache参数(https://www.rdocumentation.org/packages/memoise/versions/2.0.0/topics/memoise)设置分配给缓存的大小。但是有没有办法在任何一个时间点查看缓存中有多少可用内存?我问是因为我想知道它是否已满,因此我的程序可以通过增加缓存的大小来加速。

(我会继续运行R 4.0.2以防Ubuntu 20.10万一)