【发布时间】:2012-09-01 01:08:32
【问题描述】:
我已经嵌套了如下的 for 循环。我需要 p:q=1:300 和 n=20。函数“mark”是我感兴趣的模型(Package RMark)。我知道 rbind 可能很慢,但我不知道应该用什么来替换它。否则我还能做些什么来使这个功能更快?谢谢。
foo<-function(data, p, q, n){
results.frame <- data.frame()
for (i in 1:n){
for (i in p:q) {
run.model<-mark(data[sample(nrow(data), i),], model="Occupancy")
results<-data.frame(summary(run.model)$real$p, Occupancy=summary(run.model)$real$Psi, se.p=t(as.matrix(summary(run.model, se=T)$real$p$se)), se.Psi=summary(run.model, se=T)$real$Psi$se, stations=i)
results.frame<-rbind(results.frame, results)
}
}
write.table(results.frame, "C:\\RWorkspace\\simulation_results.txt")
return(results.frame)
}
【问题讨论】:
-
1)你应该预先分配
results.frame的维度,然后通过索引填充它。 2) 你真的需要data.frame()还是matrix()就足够了?您的所有结果看起来都是数字,因此矩阵可能就足够了。 3)cmpfun()你的函数通过compiler包查看是否可以让你获得任何免费的减速带。 4) 告诉我们函数mark()来自哪里,因为它不在基础中,而且您的问题不是reproducible,所以人们会发现很难提供真正的建议。 -
1) 听起来很合理,我会试试的。 2) 是的,我所有的输出都是数字的,所以我将切换到 matrix()。 3) 我会看看
cmpfun()和complier。 4)函数mark()来自“RMark”包,用于动物种群动态。感谢您的建议。 -
另外,你在两个循环中都使用了
i;最好使用不同的变量,这样你就可以确定你在循环中使用了你想要的i。