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

时间:2015-06-12 16:41:26

标签: r dataframe timing

检查data.frame是否为空的最快(每微秒计数)方式是多少?我需要在以下背景下:

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

可能的解决方案:

1)来自`spatstat'软件包的if(is.empty(df$V1) == FALSE

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 个答案:

答案 0 :(得分:4)

假设我们有两种类型的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的非空虚的步骤都不会是花费最多时间的部分。虽然在这一步骤中可能存在优化空间,但是#34;过早优化是所有邪恶的根源&#34;正如唐纳德克努特所说。