Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用rcpp::cpp函数编译多个嵌套循环_R_Rcpp - Fatal编程技术网

使用rcpp::cpp函数编译多个嵌套循环

使用rcpp::cpp函数编译多个嵌套循环,r,rcpp,R,Rcpp,R-用户 我试图用蛮力来解决一个组合问题,以评估近似计算的质量。为此,我编写了一个小的R函数,对于变量R,它输出一个非常丑陋的rcpp函数,其中包含R个嵌套循环和一些中断条件。然而,当r开始在20+的范围内时,使用rcpp::cppFunction编译函数需要非常长的时间 有没有解释为什么rcpp编译会因为大量嵌套循环而出现故障?当我用C++编译函数作为普通C++程序时,它就在不到一秒钟的时间内编译直线,并且运行完美无缺(使用CUT而不是RcOUT)。 我可能遗漏了一些明显的东西,因为当我删除除

R-用户

我试图用蛮力来解决一个组合问题,以评估近似计算的质量。为此,我编写了一个小的R函数,对于变量R,它输出一个非常丑陋的rcpp函数,其中包含R个嵌套循环和一些中断条件。然而,当r开始在20+的范围内时,使用rcpp::cppFunction编译函数需要非常长的时间

有没有解释为什么rcpp编译会因为大量嵌套循环而出现故障?当我用C++编译函数作为普通C++程序时,它就在不到一秒钟的时间内编译直线,并且运行完美无缺(使用CUT而不是RcOUT)。 我可能遗漏了一些明显的东西,因为当我删除除最里面的break条件之外的所有条件时,它就可以用rcpp漂亮地编译了。然而,当我删除这个最后的中断条件时,它不会再次完成编译。。。 有什么建议吗

这里有一个r=20的示例程序,我还在等待编译完成。警告:它很难看,但会自动生成

cppFunction('
int make_tList_rcpp() {
int r = 20;
std::cout << std::endl;
 for (int t20=0; t20 <= floor(r/20); t20++) {
  for (int t19=0; t19 <= floor(r/19); t19++) {
   for (int t18=0; t18 <= floor(r/18); t18++) {
    for (int t17=0; t17 <= floor(r/17); t17++) {
     for (int t16=0; t16 <= floor(r/16); t16++) {
      for (int t15=0; t15 <= floor(r/15); t15++) {
       for (int t14=0; t14 <= floor(r/14); t14++) {
        for (int t13=0; t13 <= floor(r/13); t13++) {
         for (int t12=0; t12 <= floor(r/12); t12++) {
          for (int t11=0; t11 <= floor(r/11); t11++) {
           for (int t10=0; t10 <= floor(r/10); t10++) {
            for (int t9=0; t9 <= floor(r/9); t9++) {
             for (int t8=0; t8 <= floor(r/8); t8++) {
              for (int t7=0; t7 <= floor(r/7); t7++) {
               for (int t6=0; t6 <= floor(r/6); t6++) {
                for (int t5=0; t5 <= floor(r/5); t5++) {
                 for (int t4=0; t4 <= floor(r/4); t4++) {
                  for (int t3=0; t3 <= floor(r/3); t3++) {
                   for (int t2=0; t2 <= floor(r/2); t2++) {
                    for (int t1=0; t1 <= floor(r/1); t1++) {
                     if ((1*t1+2*t2+3*t3+4*t4+5*t5+6*t6+7*t7+8*t8+9*t9+10*t10+11*t11+12*t12+13*t13+14*t14+15*t15+16*t16+17*t17+18*t18+19*t19+20*t20) == r) {
                      Rcout << t1 << "," << t2 << "," << t3 << "," << t4 << "," << t5 << "," << t6 << "," << t7 << "," << t8 << "," << t9 << "," << t10 << "," << t11 << "," << t12 << "," << t13 << "," << t14 << "," << t15 << "," << t16 << "," << t17 << "," << t18 << "," << t19 << "," << t20 << std::endl;
                     }
                     if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2+1*t1) > r) {
                      break;
                     }
                    }
                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2) > r) {
                     break;
                    }
                   }
                   if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3) > r) {
                    break;
                   }
                  }
                  if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4) > r) {
                   break;
                  }
                 }
                 if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5) > r) {
                  break;
                 }
                }
                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6) > r) {
                 break;
                }
               }
               if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7) > r) {
                break;
               }
              }
              if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8) > r) {
               break;
              }
             }
             if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9) > r) {
              break;
             }
            }
            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10) > r) {
             break;
            }
           }
           if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11) > r) {
            break;
           }
          }
          if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12) > r) {
           break;
          }
         }
         if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13) > r) {
          break;
         }
        }
        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14) > r) {
         break;
        }
       }
       if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15) > r) {
        break;
       }
      }
      if ((20*t20+19*t19+18*t18+17*t17+16*t16) > r) {
       break;
      }
     }
     if ((20*t20+19*t19+18*t18+17*t17) > r) {
      break;
     }
    }
    if ((20*t20+19*t19+18*t18) > r) {
     break;
    }
   }
   if ((20*t20+19*t19) > r) {
    break;
   }
  }
  if ((20*t20) > r) {
   break;
  }
 }
 return(0);
}')

除了macOS,它可以在任何平台上编译和运行

编辑之后,我们有一些有用的调试信息。特别是,正在使用的标志:

clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include  -I"/Users/hoehle/Library/R/3.3/library/Rcpp/include" -I"/Users/hoehle/Sandbox/Blog/_source"   -fPIC  -Wall -mtune=core2 -g -O2  -c foobar.cpp -o foobar.o
macOS上嵌套
for
循环编译出现问题的原因与
clang
如何优化
-O2
vs
-Os
下的嵌套循环有关。具体而言,存在一个回归循环
clang
v3.0,它直接影响优化所述循环的能力。具体见:

此问题似乎已在3.8版本内修复。缺点是您必须手动更新此编译器,因为此回归在所有macOS机器上都附带
clang
版本。您可能只想在macOS上切换到
gcc
。无论如何,下面的文章应该有助于通过自制和
~/.R/Makevars

您可能希望使用
sourceCpp()
而不是
cppFunction()
,因为后者用于更简单的函数。
sourceCpp()
函数用于更复杂的情况。此外,我可能会选择避免指定
int
返回类型

sourceCpp()的使用示例

文件:示例_comb.cpp

#include <Rcpp.h>

// [[Rcpp::export]]
void make_tList_rcpp() {
    int r = 20;
    std::cout << std::endl;
    for (int t20=0; t20 <= floor(r/20); t20++) {
        for (int t19=0; t19 <= floor(r/19); t19++) {
            for (int t18=0; t18 <= floor(r/18); t18++) {
                for (int t17=0; t17 <= floor(r/17); t17++) {
                    for (int t16=0; t16 <= floor(r/16); t16++) {
                        for (int t15=0; t15 <= floor(r/15); t15++) {
                            for (int t14=0; t14 <= floor(r/14); t14++) {
                                for (int t13=0; t13 <= floor(r/13); t13++) {
                                    for (int t12=0; t12 <= floor(r/12); t12++) {
                                        for (int t11=0; t11 <= floor(r/11); t11++) {
                                            for (int t10=0; t10 <= floor(r/10); t10++) {
                                                for (int t9=0; t9 <= floor(r/9); t9++) {
                                                    for (int t8=0; t8 <= floor(r/8); t8++) {
                                                        for (int t7=0; t7 <= floor(r/7); t7++) {
                                                            for (int t6=0; t6 <= floor(r/6); t6++) {
                                                                for (int t5=0; t5 <= floor(r/5); t5++) {
                                                                    for (int t4=0; t4 <= floor(r/4); t4++) {
                                                                        for (int t3=0; t3 <= floor(r/3); t3++) {
                                                                            for (int t2=0; t2 <= floor(r/2); t2++) {
                                                                                for (int t1=0; t1 <= floor(r/1); t1++) {
                                                                                    if ((1*t1+2*t2+3*t3+4*t4+5*t5+6*t6+7*t7+8*t8+9*t9+10*t10+11*t11+12*t12+13*t13+14*t14+15*t15+16*t16+17*t17+18*t18+19*t19+20*t20) == r) {
                                                                                        Rcpp::Rcout << t1 << "," << t2 << "," << t3 << "," << t4 << "," << t5 << "," << t6 << "," << t7 << "," << t8 << "," << t9 << "," << t10 << "," << t11 << "," << t12 << "," << t13 << "," << t14 << "," << t15 << "," << t16 << "," << t17 << "," << t18 << "," << t19 << "," << t20 << std::endl;
                                                                                    }
                                                                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2+1*t1) > r) {
                                                                                        break;
                                                                                    }
                                                                                }
                                                                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2) > r) {
                                                                                    break;
                                                                                }
                                                                            }
                                                                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3) > r) {
                                                                                break;
                                                                            }
                                                                        }
                                                                        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4) > r) {
                                                                            break;
                                                                        }
                                                                    }
                                                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5) > r) {
                                                                        break;
                                                                    }
                                                                }
                                                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6) > r) {
                                                                    break;
                                                                }
                                                            }
                                                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7) > r) {
                                                                break;
                                                            }
                                                        }
                                                        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8) > r) {
                                                            break;
                                                        }
                                                    }
                                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9) > r) {
                                                        break;
                                                    }
                                                }
                                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10) > r) {
                                                    break;
                                                }
                                            }
                                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11) > r) {
                                                break;
                                            }
                                        }
                                        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12) > r) {
                                            break;
                                        }
                                    }
                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13) > r) {
                                        break;
                                    }
                                }
                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14) > r) {
                                    break;
                                }
                            }
                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15) > r) {
                                break;
                            }
                        }
                        if ((20*t20+19*t19+18*t18+17*t17+16*t16) > r) {
                            break;
                        }
                    }
                    if ((20*t20+19*t19+18*t18+17*t17) > r) {
                        break;
                    }
                }
                if ((20*t20+19*t19+18*t18) > r) {
                    break;
                }
            }
            if ((20*t20+19*t19) > r) {
                break;
            }
        }
        if ((20*t20) > r) {
            break;
        }
    }

}


/*** R
# Runs automatically in R after compile
make_tList_rcpp(42)
*/
#包括
//[[Rcpp::导出]]
作废make_tList_rcpp(){
int r=20;

std::cout这可以编译并运行在除macOS之外的所有平台上

编辑后,我们有一些有用的调试信息。特别是使用的标志:

clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include  -I"/Users/hoehle/Library/R/3.3/library/Rcpp/include" -I"/Users/hoehle/Sandbox/Blog/_source"   -fPIC  -Wall -mtune=core2 -g -O2  -c foobar.cpp -o foobar.o
macOS上嵌套
for
循环编译出现问题的原因与
clang
如何优化
-O2
vs
-Os
下的嵌套循环有关。具体而言,存在一个回归循环
clang
v3.0,它直接影响优化所述循环的能力。具体请参阅:

此问题似乎已在3.8版本中修复。缺点是,由于此回归在所有macOS计算机上都附带了
clang
版本,因此您必须手动更新此编译器。您可能只想在macOS上切换到
gcc
。无论如何,下面的帖子应该有助于设置适当的编译器通过自制和
~/.R/Makevars

您可能希望使用
sourceCpp()
而不是
cppFunction()
,因为后者用于更简单的函数。
sourceCpp()
函数用于更复杂的情况。此外,我可能会选择避免指定
int
返回类型

sourceCpp()的使用示例

文件:示例_comb.cpp

#include <Rcpp.h>

// [[Rcpp::export]]
void make_tList_rcpp() {
    int r = 20;
    std::cout << std::endl;
    for (int t20=0; t20 <= floor(r/20); t20++) {
        for (int t19=0; t19 <= floor(r/19); t19++) {
            for (int t18=0; t18 <= floor(r/18); t18++) {
                for (int t17=0; t17 <= floor(r/17); t17++) {
                    for (int t16=0; t16 <= floor(r/16); t16++) {
                        for (int t15=0; t15 <= floor(r/15); t15++) {
                            for (int t14=0; t14 <= floor(r/14); t14++) {
                                for (int t13=0; t13 <= floor(r/13); t13++) {
                                    for (int t12=0; t12 <= floor(r/12); t12++) {
                                        for (int t11=0; t11 <= floor(r/11); t11++) {
                                            for (int t10=0; t10 <= floor(r/10); t10++) {
                                                for (int t9=0; t9 <= floor(r/9); t9++) {
                                                    for (int t8=0; t8 <= floor(r/8); t8++) {
                                                        for (int t7=0; t7 <= floor(r/7); t7++) {
                                                            for (int t6=0; t6 <= floor(r/6); t6++) {
                                                                for (int t5=0; t5 <= floor(r/5); t5++) {
                                                                    for (int t4=0; t4 <= floor(r/4); t4++) {
                                                                        for (int t3=0; t3 <= floor(r/3); t3++) {
                                                                            for (int t2=0; t2 <= floor(r/2); t2++) {
                                                                                for (int t1=0; t1 <= floor(r/1); t1++) {
                                                                                    if ((1*t1+2*t2+3*t3+4*t4+5*t5+6*t6+7*t7+8*t8+9*t9+10*t10+11*t11+12*t12+13*t13+14*t14+15*t15+16*t16+17*t17+18*t18+19*t19+20*t20) == r) {
                                                                                        Rcpp::Rcout << t1 << "," << t2 << "," << t3 << "," << t4 << "," << t5 << "," << t6 << "," << t7 << "," << t8 << "," << t9 << "," << t10 << "," << t11 << "," << t12 << "," << t13 << "," << t14 << "," << t15 << "," << t16 << "," << t17 << "," << t18 << "," << t19 << "," << t20 << std::endl;
                                                                                    }
                                                                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2+1*t1) > r) {
                                                                                        break;
                                                                                    }
                                                                                }
                                                                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2) > r) {
                                                                                    break;
                                                                                }
                                                                            }
                                                                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3) > r) {
                                                                                break;
                                                                            }
                                                                        }
                                                                        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4) > r) {
                                                                            break;
                                                                        }
                                                                    }
                                                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5) > r) {
                                                                        break;
                                                                    }
                                                                }
                                                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6) > r) {
                                                                    break;
                                                                }
                                                            }
                                                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7) > r) {
                                                                break;
                                                            }
                                                        }
                                                        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8) > r) {
                                                            break;
                                                        }
                                                    }
                                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9) > r) {
                                                        break;
                                                    }
                                                }
                                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10) > r) {
                                                    break;
                                                }
                                            }
                                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11) > r) {
                                                break;
                                            }
                                        }
                                        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12) > r) {
                                            break;
                                        }
                                    }
                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13) > r) {
                                        break;
                                    }
                                }
                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14) > r) {
                                    break;
                                }
                            }
                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15) > r) {
                                break;
                            }
                        }
                        if ((20*t20+19*t19+18*t18+17*t17+16*t16) > r) {
                            break;
                        }
                    }
                    if ((20*t20+19*t19+18*t18+17*t17) > r) {
                        break;
                    }
                }
                if ((20*t20+19*t19+18*t18) > r) {
                    break;
                }
            }
            if ((20*t20+19*t19) > r) {
                break;
            }
        }
        if ((20*t20) > r) {
            break;
        }
    }

}


/*** R
# Runs automatically in R after compile
make_tList_rcpp(42)
*/
#包括
//[[Rcpp::导出]]
作废make_tList_rcpp(){
int r=20;

std::不可能是最好的嵌套循环,我自己无法复制它。上面的
cppfunction
代码在我的笔记本电脑上以~1s的时间编译。在Linux上的Rcpp 0.12.8,R 3.3.1-粘贴
verbose=TRUE,rebuild=TRUE
是否会告诉我们更多关于进程的哪个部分被粘贴的信息?循环会找到解决问题所需的所有集合我想在上面的文章中更新一些调试信息。在Linux上也尝试过,这里它工作,所以它似乎是我的MAC配置的问题……可能是太旧/新的C++编译器……可能是最好的嵌套循环,它自己不能复制。你的代码> CPPPytys/CODE >代码Above在我的笔记本电脑上以~1s的速度编译。Linux上的Rcpp 0.12.8,R 3.3.1-粘贴
verbose=TRUE,rebuild=TRUE
是否能告诉我们更多关于该过程中哪个部分被粘贴的信息?循环找到了解决生日问题所需的所有集合,概率不相等-请参阅@Spacedman我已经用一些调试更新了上面的帖子NFO。它也在Linux上试用过,它在这里工作,所以它似乎是我的MAC配置的问题……可能是太老/新的C++编译器……我不得不将RcOUT替换为RCPP::RcOUT,以便开始编译。但是,这仍然挂在我的计算机(MAC)的编译中。。然而,当我在Linux上尝试它时,它似乎起了作用……奇怪……似乎这是
clang
的问题。上面在Rtools工具包下编译的很好,@Spacedman在Linux下成功编译了它。给我一些时间想一想。尝试了回答中提到的博客文章中的建议:修改Makevars以使用通过自制程序安装的gcc-4.9运行正常(有很多警告,但可以编译!)@mhatsu很高兴听到它起作用。请随意接受答案。此外,您可能希望安装最新的
gcc
,它将为您提供
gcc-6
。我必须将Rcout替换为Rcpp::Rcout才能开始编译。但是,这仍然挂在我的计算机(Mac)上的编译中。然而,当我尝试使用它时
#include <Rcpp.h>

// [[Rcpp::export]]
void make_tList_rcpp() {
    int r = 20;
    std::cout << std::endl;
    for (int t20=0; t20 <= floor(r/20); t20++) {
        for (int t19=0; t19 <= floor(r/19); t19++) {
            for (int t18=0; t18 <= floor(r/18); t18++) {
                for (int t17=0; t17 <= floor(r/17); t17++) {
                    for (int t16=0; t16 <= floor(r/16); t16++) {
                        for (int t15=0; t15 <= floor(r/15); t15++) {
                            for (int t14=0; t14 <= floor(r/14); t14++) {
                                for (int t13=0; t13 <= floor(r/13); t13++) {
                                    for (int t12=0; t12 <= floor(r/12); t12++) {
                                        for (int t11=0; t11 <= floor(r/11); t11++) {
                                            for (int t10=0; t10 <= floor(r/10); t10++) {
                                                for (int t9=0; t9 <= floor(r/9); t9++) {
                                                    for (int t8=0; t8 <= floor(r/8); t8++) {
                                                        for (int t7=0; t7 <= floor(r/7); t7++) {
                                                            for (int t6=0; t6 <= floor(r/6); t6++) {
                                                                for (int t5=0; t5 <= floor(r/5); t5++) {
                                                                    for (int t4=0; t4 <= floor(r/4); t4++) {
                                                                        for (int t3=0; t3 <= floor(r/3); t3++) {
                                                                            for (int t2=0; t2 <= floor(r/2); t2++) {
                                                                                for (int t1=0; t1 <= floor(r/1); t1++) {
                                                                                    if ((1*t1+2*t2+3*t3+4*t4+5*t5+6*t6+7*t7+8*t8+9*t9+10*t10+11*t11+12*t12+13*t13+14*t14+15*t15+16*t16+17*t17+18*t18+19*t19+20*t20) == r) {
                                                                                        Rcpp::Rcout << t1 << "," << t2 << "," << t3 << "," << t4 << "," << t5 << "," << t6 << "," << t7 << "," << t8 << "," << t9 << "," << t10 << "," << t11 << "," << t12 << "," << t13 << "," << t14 << "," << t15 << "," << t16 << "," << t17 << "," << t18 << "," << t19 << "," << t20 << std::endl;
                                                                                    }
                                                                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2+1*t1) > r) {
                                                                                        break;
                                                                                    }
                                                                                }
                                                                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2) > r) {
                                                                                    break;
                                                                                }
                                                                            }
                                                                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3) > r) {
                                                                                break;
                                                                            }
                                                                        }
                                                                        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4) > r) {
                                                                            break;
                                                                        }
                                                                    }
                                                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5) > r) {
                                                                        break;
                                                                    }
                                                                }
                                                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6) > r) {
                                                                    break;
                                                                }
                                                            }
                                                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7) > r) {
                                                                break;
                                                            }
                                                        }
                                                        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8) > r) {
                                                            break;
                                                        }
                                                    }
                                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9) > r) {
                                                        break;
                                                    }
                                                }
                                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10) > r) {
                                                    break;
                                                }
                                            }
                                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11) > r) {
                                                break;
                                            }
                                        }
                                        if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12) > r) {
                                            break;
                                        }
                                    }
                                    if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13) > r) {
                                        break;
                                    }
                                }
                                if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14) > r) {
                                    break;
                                }
                            }
                            if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15) > r) {
                                break;
                            }
                        }
                        if ((20*t20+19*t19+18*t18+17*t17+16*t16) > r) {
                            break;
                        }
                    }
                    if ((20*t20+19*t19+18*t18+17*t17) > r) {
                        break;
                    }
                }
                if ((20*t20+19*t19+18*t18) > r) {
                    break;
                }
            }
            if ((20*t20+19*t19) > r) {
                break;
            }
        }
        if ((20*t20) > r) {
            break;
        }
    }

}


/*** R
# Runs automatically in R after compile
make_tList_rcpp(42)
*/