我在R中遇到了很大的性能问题.我编写了一个迭代data.frame对象的函数.它只是添加一个新列data.frame并积累一些东西.(操作简单).将data.frame有大约850K行.我的电脑仍在工作(现在大约10小时),我不知道运行时间.
dayloop2 <- function(temp){
for (i in 1:nrow(temp)){
temp[i,10] <- i
if (i > 1) {
if ((temp[i,6] == temp[i-1,6]) & (temp[i,3] == temp[i-1,3])) {
temp[i,10] <- temp[i,9] + temp[i-1,10]
} else {
temp[i,10] <- temp[i,9]
}
} else {
temp[i,10] <- temp[i,9]
}
}
names(temp)[names(temp) == "V10"] <- "Kumm."
return(temp)
}
Run Code Online (Sandbox Code Playgroud)
有什么想法如何加快这个操作?
......关于执行时间和/或记忆.
如果不是这样,请使用代码段进行证明.请注意,矢量化的加速不计算在内.增速必须来自apply(tapply,sapply,...)本身.
可能重复:
R是否适用于家庭而不是语法糖
正如标题所说的那样.也许是个愚蠢的问题,但我的理解是,当使用"apply"函数时,迭代是在编译代码中而不是在R解析器中执行的.例如,如果存在大量迭代并且每个操作相对简单,那么这似乎意味着lapply仅比"for"循环更快.例如,如果对lapply中包含的函数的单个调用需要10秒,而且只有12次迭代,我会想到使用"for"和"lapply"之间几乎没有任何区别.
既然我想到了,如果必须解析"lapply"中的函数,为什么使用"lapply"而不是"for"会有任何性能上的好处,除非你正在做一些有编译函数的东西(如总结或乘法等)?
提前致谢!
玩笑
r ×3
apply ×1
compilation ×1
for-loop ×1
lapply ×1
loops ×1
parsing ×1
performance ×1
r-faq ×1
rcpp ×1