【问题标题】:R knitr: is it possible to use cached results across different machines?R knitr:是否可以在不同机器上使用缓存结果?
【发布时间】:2013-06-15 04:14:05
【问题描述】:

问题已解决,详情请参阅答案。

我想在更强大的服务器上运行一些代码(使用knitr),然后也许可以在我自己的笔记本电脑上进行一些小改动。即使是复制整个文件夹,在本地重新编译时似乎会重建缓存,有没有办法避免这种情况并实际使用缓存中的结果?

【问题讨论】:

    标签: r knitr


    【解决方案1】:

    更新:问题来自不同机器上的不同版本的knitr


    理论上,是的——如果您不更改任何内容,缓存将被保留。在实践中,您必须仔细检查“小变化”是什么。 The documentation pagefor cache 已经说明什么时候会重建缓存,需要检查三个条件是否都满足。

    【讨论】:

    • 非常感谢您的回答。在另一台机器上重新编译之前,我在没有更改任何内容的情况下复制了文件夹,所以我猜这三个条件都满足了。我现在注意到两台机器运行不同版本的 R(即首先是 2.15.1,然后是本地 3.0)。但是我没有使用 cache.extra 选项,是否仍然是版本的差异促使缓存被重建?另一方面,我也想知道@Greg 提到的日期时间问题是否会产生影响。
    • 日期/时间无关紧要。 R版本也不重要。你只需要确保两台机器上的knitr版本相同,所以检查library(knitr); sessionInfo()
    • 我刚查了一下,发现knitr的版本其实是不一样的。感谢您的建议,我将尝试在两台机器上使用相同的版本重做实验,希望这能解决问题。
    • @user2252705 很高兴你知道了;通常这应该不是问题——我一直在尝试不破坏不同版本 knitr 的缓存,但有时我不得不
    • 实验成功了,当在两台机器上使用相同版本的knitr 编译时,缓存功能按我的预期工作。非常感谢您的帮助。
    【解决方案2】:

    我想知道除了@Yihui 的回答之外,从一台机器复制到另一台机器的过程是否会改变文件的日期时间,即使没有任何变化,它们也会显得过时。

    复制后查看所涉及文件的日期。如果您能确定哪些文件需要比其他文件更新,那么touching 他们可能会阻止重建。

    另一种选择是直接粘贴已损坏的部分,这样它们就不会重新运行(尽管这意味着如果您更改这些部分中的任何内容,您必须重新运行并手动重新粘贴)。

    【讨论】:

    • 非常感谢您的回答。缓存中有许多文件,因此touch以正确的顺序对它们进行处理似乎不太实用。我想这同样适用于手动粘贴,但我不太确定我理解你的意思。再次感谢。
    • @user2252705,将其粘贴到我的意思是只需从要缓存的部分获取输出并将其直接粘贴到文件中,而不是使用将生成输出的命令。
    猜你喜欢
    • 2015-11-06
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多