在 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/