【发布时间】:2012-09-29 05:19:38
【问题描述】:
我正在 R 中运行一个函数,该函数可能需要很长时间才能运行,因为它执行多个命令来转换和子集一些数据,然后将其推送到 ggplot 进行绘图。我需要多次运行此函数来调整参数值。我将提供的示例很简单……但想知道如何加快速度?如果按比例放大,即获得每个组合的最快方法是什么...是否有将for 循环转换为mclapply 的通用方法,假设它们更快...请随时提供替代模拟示例来演示对特定方法的偏好
模拟示例:
基本功能:
ff <- function(n, mu, stdev){
x1 <- c(1:n)
y1 <- rnorm(n,mu,stdev)
z1 <- data.frame(cbind(x1,y1))
ggplot(z1, aes(x=x1,y=y1))+
geom_point()+
labs(title=paste("n=",n,"mu=",mu, "stdev=",stdev))
}
所以通过参数的方法是执行以下操作......
for(i in 1:10){
for(j in 1:2){
for(k in seq(100,500,by=100)){
ff(k,i,j)
}
}
}
加快速度的最快方法是什么?我假设它可能需要expand.grid(x=c(1:10),y=c(1:2),z=seq(100,500,by=100)) 和使用mclapply 之类的东西来遍历每一行......以某种并行方式? (我有 4 个内核可用于此)。请根据可以最大程度提高速度的方法,随意从基本功能中提取一些内容或将内容放入基本功能中。如果您增加每个参数的范围,该过程显然会花费更长的时间,但是对此没有什么可以做的......或者如果分成更多的核心或其他东西,也可以以某种方式改变......?
对于奖励积分...是否有任何东西可以保存输出图像并创建像 manipulate 包中一样的滑块以交互方式遍历所有参数...其中所做的就是拉取出相关图像,而不是每次都重新计算。
注意请随意使用/建议您认为可能对您的解决方案有用的任何其他软件包(如 foreach)
【问题讨论】:
标签: r for-loop foreach ggplot2 mclapply