Я пытаюсь найти простой способ использовать что-то вроде хеш-функций Perl в R (по сути, кеширование), поскольку я намеревался сделать как хэширование в стиле Perl, так и написать собственное собственное описание вычислений. Тем не менее, другие избили меня до удара и имеют пакеты для воспоминаний. Чем больше я копаю, тем больше я нахожу, например, memoise
и R.cache
, но различия неясны. Кроме того, неясно, как еще можно получить хэши Perl-стиля (или словари в стиле Python) и написать одну собственную memoization, кроме как использовать пакет hash
, который, похоже, не лежит в основе двух пакетов memoization.
Поскольку я не могу найти никакой информации о CRAN или где-либо еще, чтобы различать параметры, возможно, это должен быть вопрос сообщества wiki о SO: каковы варианты memoization и кеширования в R, и каковы их отличия?
В качестве основы для сравнения, вот список вариантов, которые я нашел. Кроме того, мне кажется, что все зависит от хэширования, поэтому я также заметлю варианты хэширования. Хранение ключей/значений несколько связано, но открывает огромную банку червей относительно систем БД (например, BerkeleyDB, Redis, MemcacheDB и множество других).
Похоже, что параметры:
хэширования
- digest - предоставляет хеширование для произвольных объектов R.
запоминание
- memoise - очень простой инструмент для memoization функций.
- R.cache - предлагает больше возможностей для memoization, хотя, похоже, некоторые из функций не имеют примеров.
Кэширование
- hash - Обеспечивает функции кеширования, сродни хешам Perl и словарям Python.
Хранение ключей/значений
Это основные опции для внешнего хранения объектов R.
Checkpointing
- cacher - похоже, это более похоже на checkpointing.
- CodeDepends - проект OmegaHat, который поддерживает
cacher
и предоставляет некоторые полезные функции. - DMTCP (а не пакет R) - похоже, поддерживает контрольную точку в кучке языков и разработчик недавно искал помощь в тестировании контрольной точки DMTCP в R.
Другие
- База R поддерживает: названные векторы и списки, имена строк и столбцов фреймов данных и имена элементов в средах. Мне кажется, что использование списка - это немного клочья. (Там также
pairlist
, но он устарел.) - Пакет data.table поддерживает быстрый поиск элементов в таблице данных.
Использовать регистр
Хотя мне больше всего интересно узнать параметры, у меня возникают два основных варианта использования:
- Кэширование: простой подсчет строк. [Примечание. Это не для НЛП, а для общего использования, поэтому библиотеки НЛП переполнены; таблицы неадекватны, потому что я предпочитаю не ждать, пока весь набор строк будет загружен в память. Хеши в стиле Perl находятся на правильном уровне полезности.]
- Запоминание чудовищных расчетов.
Это действительно происходит потому, что я вникаю в профилирование некоторого кода slooooow, и мне бы очень хотелось просто подсчитать простые строки и посмотреть, могу ли я ускорить некоторые вычисления посредством memoization. Имея возможность хешировать входные значения, даже если я не memoize, позволит мне увидеть, может ли memoization помочь.
Примечание 1: CRAN Task View on Reproducible Research содержит несколько пакетов (cacher
и R.cache
), но не существует необходимости в разработке вариантов использования.
Примечание 2: Чтобы помочь другим, ищущим связанный код, несколько примечаний к некоторым из авторов или пакетов. Некоторые авторы используют SO.:)
- Dirk Eddelbuettel:
digest
- от этого зависит множество других пакетов. - Роджер Пэн:
cacher
,filehash
,stashR
- это разные проблемы по-разному; см. сайт Roger для получения дополнительных пакетов. - Кристофер Браун:
hash
- Кажется, это полезный пакет, но ссылки на ODG, к сожалению, недоступны. - Хенрик Бенгтссон:
R.cache
и Хэдли Уикхем:memoise
- пока не ясно, когда нужно отдать предпочтение одному пакету другому.
Примечание 3: Некоторые люди используют memoise/memoisation, другие используют memoize/memoization. Просто заметьте, если вы ищете. Хенрик использует "z", а Хэдли использует "s".