假设由于某种原因我需要在数据帧中循环遍历行.
我创建了一个简单的data.frame
df <- data.frame(id = sample(1e6, 1e7, replace = TRUE))
Run Code Online (Sandbox Code Playgroud)
似乎f2比f1慢得多,而我预计它们是等价的.
f1 <- function(v){
for (obs in 1:(1e6) ){
a <- v[obs]
}
a
}
system.time(f1(df$id))
f2 <- function(){
for (obs in 1:(1e6) ){
a <- df$id[obs]
}
a
}
system.time(f2())
Run Code Online (Sandbox Code Playgroud)
你知道为什么吗?他们使用完全相同的内存量吗?
如果你改为写下这样的时间并认识到这df$x真的是一个函数调用,`$`(df,x)那么这个谜就会消失:
system.time(for(i in 1:1e6) df$x)
# user system elapsed
# 8.52 0.00 8.53
system.time(for(i in 1) df$x)
# user system elapsed
# 0 0 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |