Я пытаюсь найти простой способ использовать что-то вроде хеш-функций Perl в R (по сути, кеширование), поскольку я собирался выполнять как хеширование в стиле Perl, так и писать свои собственные запоминания вычислений.Тем не менее, другие избили меня до отказа и имеют пакеты для запоминания.Чем больше я копаю, тем больше нахожу, например, memoise
и R.cache
, но различия не всегда очевидны.Кроме того, неясно, как еще можно получить хеши в стиле Perl (или словари в стиле Python) и написать собственную памятку, кроме использования пакета hash
, который, кажется, не лежит в основе двух пакетов памятки.
Поскольку я не могу найти информацию о CRAN или где-либо еще, чтобы различать варианты, возможно, это должен быть вопрос вики сообщества для SO: Какие есть варианты для запоминания и кэширования в R, и каковы их различия?
В качестве основы для сравнения приведен список опций, которые я нашел.Кроме того, мне кажется, что все зависит от хеширования, поэтому я также отмечу варианты хеширования.Хранилище ключей / значений в некоторой степени связано, но открывает огромную кучу червей в отношении систем БД (например, BerkeleyDB, Redis, MemcacheDB и множество других ).
Похоже, варианты:
Хеширование
- Дайджест - обеспечивает хеширование для произвольных объектов R.
Памятка
- memoise - очень простой инструмент для запоминания функций.
- R.cache - предлагает больше функций для запоминания, хотя в некоторых функциях нет примеров.
Кэширование
- hash - Обеспечивает функциональность кэширования, аналогичную хешам Perl и словарям Python.
Хранение ключей / значений
Это основные параметры для внешнего хранения объектов R.
Контрольная точка
Other
- Base Rподдерживает: именованные векторы и списки, имена строк и столбцов фреймов данных и имена элементов в средах.Мне кажется, что использование списка является чем-то вроде клочья.(Существует также
pairlist
, но устарела .) - Пакет data.table поддерживает быстрый поиск элементов в таблице данных.
Вариант использования
Хотя я в основном заинтересован в знании опций, у меня есть два основных варианта использования:
- Кэширование: Простой подсчетстроки.[Примечание: это не для NLP, а для общего использования, поэтому библиотеки NLP излишни;таблицы неадекватны, потому что я предпочитаю не ждать, пока весь набор строк будет загружен в память.Хеши в стиле Perl находятся на правильном уровне полезности.]
- Запоминание чудовищных вычислений.
Они действительно возникают, потому что я копаюсь в профилировании некоторыхslooooow code и мне бы очень хотелось просто посчитать простые строки и посмотреть, смогу ли я ускорить некоторые вычисления с помощью запоминания.Возможность хэширования входных значений, даже если я не запоминаю, позволила бы мне понять, может ли помочь запоминание.
Примечание 1. Представление задачи CRAN для исследования воспроизводимости перечисляет пару пакетов (cacher
и R.cache
), но нет подробного описания вариантов использования.
Примечание 2: Чтобы помочь другим, ищущим связанный код, вот несколько замечаний по некоторым изавторы или пакеты.Некоторые из авторов используют SO.:)
- Dirk Eddelbuettel:
digest
- от этого зависит множество других пакетов.
- Роджер Пэн:
cacher
, filehash
, stashR
- они по-разному решают разные проблемы; см. сайт Роджера для получения дополнительных пакетов.
- Кристофер Браун:
hash
- Кажется, это полезный пакет, но ссылки на ODG, к сожалению, недоступны.
- Хенрик Бенгтссон:
R.cache
и Хэдли Уикхем: memoise
- пока не ясно, когда предпочесть одну упаковку другой.
Примечание 3: Некоторые люди используют памятку / памятку, другие используют памятку / памятку. Просто заметка, если вы ищете вокруг. Хенрик использует «z», а Хэдли использует «s».