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() 应该可以了解所花费的时间以及大部分时间花费在哪里。

关于r - 在一个语句中对多个 data.table 赋值是否有性能优势?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34182730/

10-10 21:19