使用 Rcpp 中包含的标准

Posted

技术标签:

【中文标题】使用 Rcpp 中包含的标准【英文标题】:Use standard includes in Rcpp 【发布时间】:2017-12-19 15:27:24 【问题描述】:

我随 RStudio 和 RTools 一起安装了 R,目前我正在尝试让 Rcpp 运行。我尝试将此代码作为测试文件:

#include <RcppArmadillo.h>
#include <cmath.h>
//[[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;

// [[Rcpp::export]]
double Mutual_Information(
    arma::mat joint_dist
)
  joint_dist = joint_dist/sum(sum(joint_dist));
  double mutual_information = 0;
  int num_rows = joint_dist.n_rows;
  int num_cols = joint_dist.n_cols;
  arma::mat colsums = sum(joint_dist,0);
  arma::mat rowsums = sum(joint_dist,1);
  for(int i = 0; i < num_rows; ++i)
    for(int j = 0; j <  num_cols; ++j)
      double temp = log((joint_dist(i,j)/(colsums[j]*rowsums[i])));
      if(!std::isfinite(temp))
        temp = 0;
      
      mutual_information += joint_dist(i,j) * temp; 
    
   
  return mutual_information;    

但我收到此错误消息:

c:/Rtools/mingw_64/bin/g++ -std=gnu++11 -I"C:/PROGRA~1/R/R-34~1.2/include" -DNDEBUG -I../inst/include -fopenmp -I"C:/Users/root/Documents/R/win-library/ 3.4/Rcpp/include"-I"C:/Users/root/Documents/R/win-library/3.4/RcppArmadillo/include"-I"C:/Users/root/OneDrive/Uni/SEMEST~1/PROJEK~ 1/test/src" -I"C:/Users/root/OneDrive/Uni/Semester 3/Projektarbeit/test/inst/include"

-I"d:/Compiler/gcc-4.9.3/local330/include" -O2 -Wall -mtune=core2 -c rcpp_hello_world.cpp -o rcpp_hello_world.o rcpp_hello_world.cpp:2:19:致命错误: cmath.h:没有这样的文件或 目录#include ^ 编译终止。制作:*** [rcpp_hello_world.o]

错误 1 ​​警告:Ausführung von Kommando 'make -f "C:/PROGRA~1/R/R-34~1.2/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-34~1.2/share/make/winshlib.mk" CXX='$(CXX11) $(CXX11STD)' CXXFLAGS='$(CXX11FLAGS)' CXXPICFLAGS='$(CXX11PICFLAGS)' SHLIB_LDFLAGS='$(SHLIB_CXX11LDFLAGS)' SHLIB_LD='$(SHLIB_CXX11LD)' SHLIB="sourceCpp_3.dll" WIN=64 TCLBIN=64 OBJECTS="rcpp_hello_world.o"' Rcpp::sourceCpp("src/rcpp_hello_world.cpp") 中的 ergab 状态 2 错误: 构建共享库时发生错误 1。另外:警告 消息:在 normalizePath(path.expand(path)、winslash、mustWork) 中: path[1]="C:/Users/root/OneDrive/Uni/Semester 3/Projektarbeit/test/src/../inst/include": Das System kann den angelegebenen Pfad nicht finden

library("Rcpp") 和 library("RcppArmadillo") 加载成功...

据我了解,此错误无法找到包含文件。编译器正在寻找的路径不存在。我假设它应该处理包含路径本身.. 在 QT 或 Visual Studio 中包含这个头文件没有任何错误..

我需要调整一些 PATH 设置吗?我在 Windows 10 x64 上运行它 我无法使用谷歌找到任何解决方案,所以我希望你能帮助我。 非常感谢

【问题讨论】:

【参考方案1】:

没有标题cmath.h 如错误消息所述。你的意思可能是cmath

经过修复和简化(无需命名空间声明)的文件通过:

#include <RcppArmadillo.h>
#include <cmath>

//[[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
double Mutual_Information(arma::mat joint_dist)
  joint_dist = joint_dist/sum(sum(joint_dist));
  double mutual_information = 0;
  int num_rows = joint_dist.n_rows;
  int num_cols = joint_dist.n_cols;
  arma::mat colsums = sum(joint_dist,0);
  arma::mat rowsums = sum(joint_dist,1);
  for(int i = 0; i < num_rows; ++i)
    for(int j = 0; j <  num_cols; ++j)
      double temp = log((joint_dist(i,j)/(colsums[j]*rowsums[i])));
      if(!std::isfinite(temp))
        temp = 0;
      
      mutual_information += joint_dist(i,j) * temp; 
    
   
  return mutual_information;    

R> sourceCpp("/tmp/soQ.cpp")
R> 

这里没有错误。

【讨论】:

非常感谢。这完美地工作。我认为我的 Rcpp 会有问题,因为代码是从如何在 Rcpp 中正确编码的示例中取出的:D 我怀疑这个例子有cmath.h。你有网址吗?另外,感谢您接受答案,请随时通过单击“向上”三角形来“投票”它——*** 中的另一种反馈形式。 mjdenny.com/Rcpp_Intro.html 如果您向下滚动到“一些示例”,您将看到我在上面发布的确切代码.. 所以请向上述文档的作者投诉;我只能谈谈 Rcpp 团队提供的(相当全面的)文档。

以上是关于使用 Rcpp 中包含的标准的主要内容,如果未能解决你的问题,请参考以下文章

翻转视图设置中包含的视图

除了标准库中包含的工具之外,Linux 上的 Python 还存在哪些分析工具?

Java 中包含的 JAX-WS 实现?

使用 .bat 文件在目录中包含的多个文件中查找和替换字符串

使用 Maven Surefire 运行依赖项 jar 中包含的 JUnit 测试

如何从视图控制器中包含的视图调用方法?