r语言 - 这里是否有明显的错误导致我的代码(嵌套循环)变慢?



我知道这是一个StackOverflow罪不创建一个可重复的例子,但我不确定这是必要的。下面的嵌套循环运行40分钟。ptptdata中大约有6,300行,它代表一个人。这个循环只是拉出某人的年龄和持续时间,直到退休。它运行一个循环,将通货膨胀(来自infdata)和价值增长(静态2.5%)相加,直到持续时间。循环结束后,它将最终的工资和年龄保存回ptptdata。然后它向下移动到下一个个体,再做一次。我已经读到,使用一个矢量,而不是添加回ptptdata会更快,但我不确定我是遵循如何做到这一点。我原以为代码会很慢,但我还有很多东西要添加,如果这个简单的过程花了这么长时间,这将是不可行的。

ptptdata$FinalSalary <- 0
ptptdata$FinalAge <- 0
trial <- 1

for(row in 1:nrow(ptptdata)){ ### Tells model to complete loop for each individual
i <- 1 ## Starting point for each individual
dur <- as.numeric(ptptdata[row,"DurationRet"]) 
age <- as.numeric(ptptdata[row, "Age"])
salary <- as.numeric(ptptdata[row,"Current Salary"])

while (i<=dur){
inflation <- as.numeric(infdata[infdata$Item == 'Inflation' & infdata$Scenario == as.factor(trial),i+2])
salboy <- salary
ageboy <- age
salary <- salboy * (1+meritgrowth)* (1+inflation)
age <- age + 1
i <- i + 1  
}
ptptdata[row,"FinalSalary"]<-salary
ptptdata[row,"FinalAge"]<-age
}
ptptdata$FinalSalary <- 0
ptptdata$FinalAge <- 0
trial <- 1
durv <- as.numeric(ptptdata$DurationRet)
agev <- as.numeric(ptptdata$Age)
salaryv <- as.numeric(ptptdata[['Current Salary']])
xx <- infdata$Item == 'Inflation' & infdata$Scenario == as.factor(trial)
for(row in 1:nrow(ptptdata)) {
i <- 1 
dur <- durv[row]
age <- agev[row]
salary <- salaryv[row]

while (i<=dur){
inflation <- as.numeric(infdata[[i+2]][xx])
salboy <- salary
ageboy <- age
salary <- salboy * (1+meritgrowth)* (1+inflation)
age <- age + 1
i <- i + 1  
}
ptptdata[row,"FinalSalary"]<-salary
ptptdata[row,"FinalAge"]<-age
}

也许这样会更快…

相关内容

最新更新