Самый быстрый способ проверить, пуст ли фрейм данных

Какой самый быстрый (на каждую микросекунду счет) способ проверить, является ли 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 не собирается быть частью, которая занимает больше всего времени. Хотя на этом этапе может быть место для оптимизации, "преждевременная оптимизация - корень всего зла", как сказал Дональд Кнут.

Другие вопросы по тегам