2015-07-23 2 views
6

Недавно я заметил в некотором старом кодексе, что я включил дополнительные квадратные скобки, когда подмножество data.table и выполнение функции неоднократно (в моем случае, вычисление корреляционных матриц). Так,Уменьшение скорости в подмножестве `data.table` при добавлении скобки

# Slow way 
rcorr(DT[subgroup][, !'Group', with=F]) 

# Faster way 
rcorr(DT[subgroup, !'Group', with=F]) 

(Разница в том, после того, как subgroup). Почему же это происходит из любопытства? С дополнительными скобками, data.table должны выполнить некоторые дополнительные вычисления?

+0

Я думаю, что [этот ответ] (http://stackoverflow.com/a/27520688/559784) должен быть полезен, в дополнение к приятному ответу Ричарда. – Arun

+0

Абсолютно! Это был очень полезный ответ, спасибо! –

ответ

5

Вот простая интерпретация:

# Slow way 
rcorr(DT[subgroup][, !'Group', with=F]) 

Второй набором скобок является второй операцией на DT, а это означает, что DT[subgroup] создает новую таблицу данных из DT, а затем [, !'Group', with = F] работает в этой таблице данных, создавая другой новая таблица данных. Отсюда и снижение скорости.

# Faster way 
rcorr(DT[subgroup, !'Group', with=F]) 

Этот способ работает только на DT, все на одном дыхании.

+0

Спасибо! Я подумал, что такое происходит. –

+1

@ Крис, он работает на той же предпосылке, что '[' будет в базе R, если это помогает –