在data.table中,以下内容具有相同的结果: dt1 - data.table(iris)dt1[, Long.Petal := Petal.Length mean(Petal.Length)]dt1[, Wide.Petal := Petal.Width mean(Petal.Width)] 和 dt2 - data.table(iris)dt2[, `:=`( Long.Petal = Petal.Leng
dt1 <- data.table(iris) dt1[, Long.Petal := Petal.Length > mean(Petal.Length)] dt1[, Wide.Petal := Petal.Width > mean(Petal.Width)]
和
dt2 <- data.table(iris) dt2[, `:=`( Long.Petal = Petal.Length > mean(Petal.Length), Wide.Petal = Petal.Width > mean(Petal.Width) )]
使用大型数据集时,后一种形式是否具有性能优势(在内存或运行时或两者方面)?或者是最小的开销,这只是风格和可读性的问题?
要考虑的事项是a)调用[.data.table,并且b)在[.data.table中运行代码.对于几个电话,它不应该真正影响.但是如果你正在做这个100或1000次(例如,使用for循环),那么它可能性能较差……主要是由于调度时间[.data.table.在这种情况下,只要没有分组,set()就是一个更好的选择.
无论如何,这些东西很容易在您的数据集上进行基准测试.调用Rprof(); < your_code取代; Rprof(NULL); summaryRprof()应该知道所花费的时间以及花费大部分时间.