检查数据框是否为空的最快方法
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 所说。
检查 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 所说。