【发布时间】:2013-06-03 04:59:47
【问题描述】:
我需要加快这个内置循环的速度,请问我该怎么做?
for(M_P in 0:9)
{
for(M_D in 0:(9-M_P))
{
for(M_A in 0:(9-M_P-M_D))
{
for(M_CC in 0:(9-M_P-M_D-M_A))
{
for(M_CD in (9-M_P-M_D-M_A-M_CC))
{
for(G_D in 0:9)
{
for(G_A in 0:(9-G_D))
{
for(G_CC in 0:(9-G_D-G_A))
{
for(G_CD in (9-G_D-G_A-G_CC))
{
for(S_D in 0:9)
{
for(S_A in 0:(9-S_D))
{
for(S_CC in 0:(9-S_D-S_A))
{
for(S_CD in (9-S_D-S_A-S_CC))
{
for(Q_P in 0:3)
{
for(Q_D in 0:(3-Q_P))
{
for(Q_A in 0:(3-Q_P-Q_D))
{
for(Q_CC in 0:(3-Q_P-Q_D-Q_A))
{
for(Q_CD in (3-Q_P-Q_D-Q_A-Q_CC))
{
计算需要很长时间,请问我该怎么做?我只是一个初学者,但我听说应用程序或多核可能有一些问题,我有 4 个核心,我正在使用 Rstudio,请帮助我。谢谢各位!
PS:告诉我您是否需要其余代码,但这是使用所有 M_P、M_D 等使用 * 和 + 进行的简单计算。如果我将其放置一夜,它是否有机会结束?我想在其中添加几个循环,所以我必须再做 3 到 10 次:s
【问题讨论】:
-
您是否考虑过使用
expand.grid将您的所有组合放入一个data.frame 中? -
抱歉我的算法不完整,我发的太快了!我添加了核心元素,即循环中的“-”
-
当我开始使用 R 时,我学到的一个教训是向量化问题而不是循环。代码以这种方式运行得更快。其中一些在以下问答中进行了描述:stackoverflow.com/questions/13475039/…。您可能希望将此作为解决问题的新思路。
-
近 20 个嵌套的
for循环?并行化对您没有多大帮助。在 C 中可能会这样做,但由于您想使用 R,您应该对代码进行矢量化。我强烈推荐阅读this document。 -
我建议你扩展你的问题,包括一个工作示例,以及你想要完成的描述。很难说向量化是否会很简单,但是拥有 20 个嵌套循环总是一个坏主意。有关如何编写好示例的详细信息,请参阅stackoverflow.com/questions/5963269/…。
标签: r loops for-loop multicore