2013-06-12 5 views
5

Проблема решена, см. Ответы для деталей.R knitr: можно ли использовать кешированные результаты на разных машинах?

Я хотел бы запустить код (с knitr) на более мощном сервере, а затем, возможно, иметь возможность делать небольшие изменения на моем собственном ноутбуке. Даже копирование по всей папке кажется, что кеш перестраивается при повторной компиляции локально, есть ли способ избежать этого и фактически использовать результаты в кеше?

ответ

5

Обновление: проблема возникла из разных версий knitr на разных машинах.


Теоретически, да - если вы ничего не измените, кеш будет сохранен. На практике вам нужно тщательно проверить, что такое «небольшие изменения». The documentation page для кэша объяснил, когда кеш будет перестроен, и вам нужно проверить, выполнены ли все три условия.

+0

Большое спасибо за ваш ответ. Я скопировал папки, не меняя ничего перед повторной компиляцией на другой машине, поэтому я предполагаю, что выполнены 3 условия. Теперь я заметил, что две машины используют разные версии R (а именно 2.15.1 сначала и 3.0 позже локально). Однако я не использую параметр cache.extra, может ли быть так, что разница в версиях подсказывает, что кеш будет перестроен? С другой стороны, я также задавался вопросом, может ли эффект datetime, упомянутый @Greg, иметь эффект. – user2252705

+0

Дата/время не имеет значения. Не имеет значения и версия R. Вам просто нужно убедиться, что версии 'knitr' одинаковы на двух машинах, поэтому проверьте' library (knitr); sessionInfo() ' –

+0

Я только что проверил и обнаружил, что версии' knitr' на самом деле разные. Спасибо за предложение, я попытаюсь повторить эксперимент с той же версией на обеих машинах и надеюсь, что это устранит проблему. – user2252705

0

Интересно, если в дополнение к ответу @ Yihui, если процесс копирования с одной машины на другую изменяет даты в файлах, чтобы они выглядели устаревшими, даже когда ничего не изменилось.

Посмотрите даты, на которые были сделаны файлы после копирования. Если вы можете определить, какие файлы должны быть новее других, то touch их может предотвратить восстановление.

Другим вариантом является просто вставить кусочки непосредственно, чтобы они не были повторно запущены (хотя это означает, что вам нужно повторно запускать и отмачивать вручную, если вы меняете что-либо в этих частях).

+0

Большое спасибо за ваш ответ. В кеше есть число файлов, поэтому «прикосновение» к ним в правильном порядке кажется не очень практичным. Я думаю, что то же самое относится к ручной пасте, хотя я не совсем уверен, что понимаю, что вы имели в виду. Еще раз спасибо. – user2252705

+0

@ user2252705, вставив его, я имею в виду просто взять вывод из части, которую вы хотите кэшировать, и вставить ее непосредственно в файл, а не с командами, которые будут генерировать вывод. –

Смежные вопросы