假设我需要以某种方式循环遍历数据框中的行。
我创建了一个简单的数据框。
我创建了一个简单的数据框。
df <- data.frame(id = sample(1e6, 1e7, replace = TRUE))
看起来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())
你知道为什么吗?它们是否使用完全相同的内存量?
$
,而第二个函数使用了1e6(一百万)次。$
不是最快的子集选择函数。 - Rolandf1
的速度是f3 <- function(v)for(a in v){NULL}; system.time(f3(df$id))
的两倍。哦,我明白了:1e6
不是向量的完整长度。system.time(f3(df$id[1:1e6]))
很快。 - Frank