Все началось с R пакета Мне нужно было использовать плохо ( 'nlt' ), у которого есть 2 другие (довольно большие) зависимости пакета ( 'adlift') , 'ebayesthresh' ). Мне нужно было проанализировать выборку данных около 4000 баллов.
Алгоритмы создают множество «скрытых» векторов, поэтому, даже если на первый взгляд вы подумаете, что у вас достаточно памяти для загрузки выборки данных и ее обработки, все становится быстро. На данный момент я должен упомянуть, что у меня есть и Ubuntu x64, и Windows x64 с 4 ГБ оперативной памяти.
Из чистого любопытства и мазохизма, я думаю, я решил попробовать его на экземпляре Amazon EC2 . В итоге я попробовал несколько из них и остановился на очень большой памяти 1016 * 17,1 ГБ с большим объемом памяти с 6,5 ЭБУ, когда мне снова не хватило памяти, и Ubuntu убила мою работающую функцию.
Я закончил с использованием подхода split-apply-Combine с 'snowall' , 'foreach' и 'doSMP', Я разбил свои данные на части, обработал каждый кусок и объединил результаты. Слава Богу, что я рад, и мы живем. Образец был проанализирован менее чем за 7 минут на моем ноутбуке.
Полагаю, я должен быть счастлив, но 7 минут - это еще много, и я бы не хотел снова прыгать в Amazon EC2, если только на самом деле не осталось ничего, что могло бы сократить время выполнения.
Я провел некоторые исследования, пакеты 'bigmemory' и 'ff' для R, по-видимому, позволяют значительно ускорить работу, особенно если я использую данные, сохраненные в файле.
Пакет 'nlt' принимает в качестве входных данных только векторы, а 'bigmemory' , например, имеет свой специальный тип данных, big.matrix. Даже если бы я волшебным образом мог передавать big.matrixes в пакет 'nlt' , это все равно оставляет много новых распределений векторов со стандартными функциями R, которые жестко запрограммированы в пакете и его зависимостях.
Я продолжаю думать о аспектно-ориентированном программировании / исправлении обезьян , и мне удалось найти, по-видимому, единственный пакет R для такой вещи, 'r-connect' .
Теперь, как я вижу, у меня есть 2 основных варианта:
- вручную переписать пакет nlt и все его функциональные зависимости из двух других пакетов и вместо стандартных функций list (), matrix () и т. Д. Использовать функции 'bigmemory' , кошмар в создание.
- заменить стандартный список R, матрицу и т. Д. На 'bigmemory' функции
Я прыгаю на акулу? Кто-нибудь еще может предложить другое решение или поделиться подобным опытом?