gpt4 book ai didi

r - 如果我添加和减去另一个变量,data.table 中的神秘 : Why does the as. character() 函数会运行得更快吗?

转载 作者:行者123 更新时间:2023-12-04 11:02:20 26 4
gpt4 key购买 nike

在将日期转换为大型数据集的字符类时,我注意到一些非常奇怪的事情。例如,我创建了一个模拟数据集,如下所示:

DT = data.table(x=rep("2007-1-1", 1e9), y = rep(1,1e9))
DT[,x] <- as.Date(DT[,x])

现在,我想将日期的 x 列从日期格式转换为字符。
DT[,x.character:= as.character(x)] 

对于大型数据集,这需要一些时间,我注意到如果我们执行以下操作,转换所需的时间会显着减少:
DT[,x.character:= as.character(x+y-y)]

我在这里所做的只是加 y 和减 y,所以我真的得到了相同的结果。从逻辑的角度来看,我似乎让计算机做更多的工作。但是,有没有理由为什么这种方法会导致比直接转换方式更快的运行?

出于说明目的,我使用 system.time() 以 10000 行运行了这些进程两次并得到以下结果:
DT = data.table(x=rep(as.Date("2007-1-1"), 1e5), y = rep(1,1e5))

system.time(DT[,x.character:= as.character(x)])
> user system elapsed
1.89 0.12 2.03

system.time(DT[,x.character:= as.character(x+y-y)])
> user system elapsed
0.635 0.008 0.643

system.time(DT[,x.character.sub:= as.character(x+y-y+y-y)])
> user system elapsed
0.347 0.004 0.351

正如我们所看到的,第二种方法所需的时间更少,更有趣的是,第三种方法使用更多的 y-y 方法,所需要的时间更少。有什么原因吗?

谢谢!

最佳答案

在 R session 期间第二次调用 as.character 会更快,因为所有字符都已添加到全局缓存中。添加和减去另一个变量是不相关的。

> library(data.table)
data.table 1.9.3 For help type: help("data.table")
> DT = data.table(x=rep(as.Date("2007-1-1"), 1e5), y = rep(1,1e5))
> system.time(DT[,x.character := as.character(x)])
user system elapsed
0.572 0.012 0.584
> system.time(DT[,x.character := as.character(x)])
user system elapsed
0.389 0.008 0.397
> system.time(DT[,x.character := as.character(x)])
user system elapsed
0.332 0.004 0.337

更重要的是,这甚至与 data.table 没有任何关系。从另一个新 session :
> x <- rep(as.Date("2007-1-1"), 1e5)
> system.time(as.character(x))
user system elapsed
0.529 0.008 0.537
> system.time(as.character(x))
user system elapsed
0.312 0.012 0.324
> system.time(as.character(x))
user system elapsed
0.327 0.008 0.335

关于r - 如果我添加和减去另一个变量,data.table 中的神秘 : Why does the as. character() 函数会运行得更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25919691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com