2012-06-06 2 views
3

Я задаю этот вопрос как общий/начальный вопрос о R, но не для пакета, который я использовал.Действия для ускорения вычислений R

У меня есть dataframe с 3 миллионами строк и 15 колонками. Я не считаю это огромным фреймворком данных, но, возможно, я ошибаюсь.

У меня был следующий скрипт, и он работал в течение 2 часов - я думаю, что я должен что-то сделать, чтобы ускорить это.

Код:

ddply(orders, .(ClientID), NumOrders=len(OrderID)) 

Это не слишком интенсивный сценарий, или опять же, я не думаю, что это.

В базе данных вы можете добавить индекс в таблицу, чтобы увеличить скорость соединения. Есть ли аналогичное действие в R Я должен делать импорт, чтобы ускорить выполнение функций/пакетов?

+4

См. [data.table] (http://cran.r-project.org/web/packages/data.table/) пакет. –

+0

@JoshuaUlrich data.table вместо dataframe? Действительно ли они взаимозаменяемы? Спасибо – mikebmassey

+0

Пришел, чтобы предложить 'data.table' тоже. Этот op будет значительно быстрее, и вы сможете запустить тот же бит кода, как только вы преобразуете свой файл data.frame в 'data.table'. 'orders <- data.table (orders)'. Так просто. – Maiasaura

ответ

2

С предложенной data.table пакета, следующая операция должна сделать работу в течение одной секунды:

orders[,list(NumOrders=length(OrderID)),by=ClientID] 
1

Похоже, весь ваш код делает это:

orders[order(orders$ClientID), ] 

Это было бы быстрее.

3

кажется мне, что вы можете: (. Я не знаю, что функция Len() существует)

orders$NumOrders <- with(orders(ave(OrderID , ClientID) , FUN=length)) 

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