Самый быстрый способ проверить, пуст ли фрейм данных
Какой самый быстрый (на каждую микросекунду счет) способ проверить, является ли data.frame
пустой? Мне это нужно в следующем контексте:
if (<df is not empty>) { do something here }
Возможные решения:
1) if(is.empty(df$V1) == FALSE
из пакета `spatstat'
2) if (nrow (df)! = 0)
3) Ваше решение
Я мог бы сделать:
library(microbenchmark)
microbenchmark(is.empty(df),times=100)
Unit: microseconds
expr min lq mean median uq max neval
is.empty(df) 5.8 5.8 6.9 6 6.2 66 100
но не уверен, как раз 2). И каково ваше решение пустого DF?
Спасибо!
1 ответ
Предположим, у нас есть два типа data.frames:
emptyDF = data.frame(a=1,b="bah")[0,]
fullDF = data.frame(a=1,b="bah")
DFs = list(emptyDF,fullDF)[sample(1:2,1e4,replace=TRUE)]
и ваш if
состояние проявляется в виде петли
boundDF = data.frame()
for (i in seq_along(DFs)){ if (nrow(DFs[[i]]))
boundDF <- rbind(boundDF,DFs[[i]])
}
В этом случае вы подходите к проблеме неправильно. if
В заявлении нет необходимости: do.call(rbind,DFs)
или же library(data.table); rbindlist(DFs)
быстрее и понятнее.
Как правило, вы ищете улучшение производительности вашего кода в неправильном месте. Независимо от того, какую операцию вы выполняете в цикле, шаг проверки не пустоты data.frame
не собирается быть частью, которая занимает больше всего времени. Хотя на этом этапе может быть место для оптимизации, "преждевременная оптимизация - корень всего зла", как сказал Дональд Кнут.