Ale*_*tov 2 r timing dataframe
检查 a 是否为data.frame空的最快(每微秒都很重要)的方法是什么?我在以下情况下需要它:
if (<df is not empty>) { do something here }
Run Code Online (Sandbox Code Playgroud)
可能的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
但不知道如何计时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)]
Run Code Online (Sandbox Code Playgroud)
你的if情况出现在一个循环中,比如
boundDF = data.frame()
for (i in seq_along(DFs)){ if (nrow(DFs[[i]]))
boundDF <- rbind(boundDF,DFs[[i]])
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您处理问题的方式是错误的。该if声明不是必需的:do.call(rbind,DFs)或者 library(data.table); rbindlist(DFs)更快、更清晰。
通常,您在错误的地方寻求代码性能的改进。无论您在循环内执行什么操作,检查 the 非空的步骤都data.frame不会是花费最多时间的部分。虽然这一步可能还有优化的空间,但正如 Donald Knuth 所说,“过早的优化是万恶之源”。