当前位置 : 主页 > 网络安全 > 测试自动化 >

在一个语句中,多个data.table赋值是否具有性能优势?

来源:互联网 收集:自由互联 发布时间:2021-06-22
在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
在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.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()应该知道所花费的时间以及花费大部分时间.

网友评论