检查数据框是否为空的最快方法

Fastest way to check if dataframe is empty

检查 data.frame 是否为空的最快(每一微秒都很重要)的方法是什么?我在以下情况下需要它:

if (<df is not empty>) { do something here }

可能的解决方案:

1) if(is.empty(df$V1) == FALSE 来自“spatstat”包

2) 如果(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 的解决方案是什么?

谢谢!

假设我们有两种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 非空的步骤都不会是花费最多时间的部分。 虽然这一步可能还有优化的空间,"Premature optimization is the root of all evil" 正如 Donald Knuth 所说。