我知道R(R: += (plus equals) and ++ (plus plus) equivalent from c++/c#/java, etc.?)
中没有+ =运算符以下函数迭代一堆东西并累积差异比预期慢。 最大的运行时组件是一个简单的添加,Rprof表明在以下函数中约20%的运行时是垃圾收集。这感觉就像我们在myVector中构建了~1e7记录的许多副本并丢弃它们,而就地操作不应该有这种开销
testCase <- function(f) {
difference<-rep(0,f)
# replicate approximate code structure of original test case
for(i in 1:10){
if(runif(1,0,1)>.1) {
partialDiff<-dd(f)#
}
else {
partialDiff<-dd2(f)#
}
difference<-difference+partialDiff
}
return(difference)
}
dd <- function(f) {
result <- (1:f)
return(result)
}
dd2 <- function(f) {
result <- sqrt(1:f)
return(result)
}
# now for actual profiling ; build the D i want 50 times, just to get a statistical profile of what is going on there
Rprof(tmp <- tempfile(), gc.profiling = TRUE, interval=".01")
for(i in 1:50) {
d<-testCase(10000000)
}
Rprof()
require(proftools)
summaryRprof(tmp)
pd <- readProfileData(tmp)
#funSummary(pd);callSummary(pd);pathSummary(pd);hotPaths(pd)
plot(pd)
使用Rprof来详细说明运行时我得到了dd序列创建的运行时的以下细分(如预期的那样),calc2显示sqrt是最大的成本(如预期的那样),但f中最大的成本是做加法的努力&#34;&差LT; -difference + partialDiff&#34 ;.这不是预期的。
任何人都可以解释原因,或提供有效的解决方法吗?
编辑:在回复评论时,我已用完整的测试用例程序替换了我的简单代码结构