正在使用Rcpp生成包,生成的.h文件缺少头

正在使用Rcpp生成包,生成的.h文件缺少头,r,rcpp,R,Rcpp,我目前正在RStudio中构建一个使用Rcpp的包。我已经定义了以下.cpp文件,它与Rcpp::sourceCpp一起工作 // [[Rcpp::plugins(cpp11)]] // [[Rcpp::interfaces(r, cpp)]] #include <Rcpp.h> #include <unordered_set> using namespace Rcpp; // [[Rcpp::export]] std::unordered_set<int>

我目前正在RStudio中构建一个使用Rcpp的包。我已经定义了以下.cpp文件,它与
Rcpp::sourceCpp
一起工作

// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::interfaces(r, cpp)]]
#include <Rcpp.h>
#include <unordered_set>
using namespace Rcpp;

// [[Rcpp::export]]
std::unordered_set<int> traverse_cor(NumericMatrix x, float maxcor) {
  std::unordered_set<int> elements;
  int ncol = x.ncol();
  for(int i = 0; i < ncol; i++) {
    for(int j = 0; j < ncol; j++) {
      if(i < j) {
        if(x(i, j) > maxcor && x(i, j) < 1){
          elements.insert(i + 1); 
        }
      }
    }
  }
  return elements;
}
尝试构建并重新加载包后,我收到以下错误(1):

../inst/include/gwasim\u RcppExports.h:27:12:错误:中的“无序”设置 命名空间“std”未命名类型

及(二)

RcppExports.cpp:12:1:错误:命名空间“std”中的“无序集”不存在 不命名类型

<>我的C++经验有限,但我的意思是这些错误是由于<代码> >包含被省略而发生的。如何使这些自动生成的文件具有正确的标题

我的sessionInfo如下所示:

Session info ----------------------------------------------------------------------
 setting  value                       
 version  R version 3.1.0 (2014-04-10)
 system   x86_64, mingw32             
 ui       RStudio (0.99.235)          
 language (EN)                        
 collate  English_United States.1252  
 tz       America/New_York            

Packages --------------------------------------------------------------------------
 package    * version    date       source                          
 devtools     1.7.0.9000 2015-02-11 Github (hadley/devtools@9415a8a)
 digest     * 0.6.4      2013-12-03 CRAN (R 3.1.0)                  
 memoise    * 0.2.1      2014-04-22 CRAN (R 3.1.0)                  
 mvtnorm      1.0-2      2014-12-18 CRAN (R 3.1.2)                  
 Rcpp         0.11.4     2015-01-24 CRAN (R 3.1.2)                  
 roxygen2   * 4.1.0      2014-12-13 CRAN (R 3.1.2)                  
 rstudioapi * 0.2        2014-12-31 CRAN (R 3.1.2)                  
 stringr    * 0.6.2      2012-12-06 CRAN (R 3.0.0)   
我的g++版本是4.6.3,包含在Windows的RTools包中。我已通过以下功能启用了C++11功能:
Sys.setenv(“PKG\u cxflags”=“-std=c++0x”)

那是个挑剔的问题。我认为您需要小插曲的第3.5.2节和以下技巧:

Package.h
文件除了包含
Package\u RcppExports.h
标题。这样做是为了使包 作者可以用自定义标题替换
Package.h
标题 并且仍然能够包括自动生成的导出 (有关此操作的详细信息将在下一节中提供)

顺便说一下,我想我也说服了您创建一个包,而不是仅仅依赖
sourceCpp()
:)

编辑:Doh!!我忽略了那部分

std::unordered_set<int> traverse_cor(NumericMatrix x, float maxcor) 
std::无序集遍历(数值矩阵x,浮点最大值)

可能不是一个自动包装的函数。您可能需要将集合转换为向量(或列表或…),以获得一种与R自然匹配的类型。

这是一种挑剔的类型。我认为您需要小插曲的第3.5.2节和以下技巧:

Package.h
文件除了包含
Package\u RcppExports.h
标题。这样做是为了使包 作者可以用自定义标题替换
Package.h
标题 并且仍然能够包括自动生成的导出 (有关此操作的详细信息将在下一节中提供)

顺便说一下,我想我也说服了您创建一个包,而不是仅仅依赖
sourceCpp()
:)

编辑:Doh!!我忽略了那部分

std::unordered_set<int> traverse_cor(NumericMatrix x, float maxcor) 
std::无序集遍历(数值矩阵x,浮点最大值)

可能不是一个自动包装的函数。您可能需要将集合转换为向量(或列表或…),以获得与R自然匹配的类型之一。

好的,我尝试了这个技巧。我做了以下操作:1)编辑Package.h头,使其具有
#include
,并删除了顶部的标记;2)尝试构建并重新加载包。似乎已经消除了RcppExports.cpp的错误,但我仍然得到了
。/inst/include/gwassim\u RcppExports.h:27:12:error:namespace“std”中的“unordered\u set”没有命名类型
看起来我需要更改Package.h文件中标题的顺序。这样做之后,我现在收到一个不同的错误,原来的错误消失了:
include/Rcpp/internal/Exporter.h:31:31:错误:从'SEXP'到'long-long unsigned int'[-fppermissive]
的转换无效,因为最简单的修复方法是在包中启用C++11支持。我相信我就是用
Sys.setenv(“PKG_cxflags”)来实现的=“-std=c++0x”)
,我在尝试构建包之前运行它。简单地说,我会在
src/Makevars
中添加
CXX\u STD=cx11
。好的,我尝试了这个技巧。我做了以下操作:1)编辑包.h头,使其包含
,并删除顶部的标记,2)尝试构建并重新加载包。看起来get消除了RcppExports.cpp的错误,但我仍然得到了
。/inst/include/gwassim\u RcppExports.h:27:12:error:namespace“std”中的“unordered\u set”没有命名类型
看起来我需要更改Package.h文件中标题的顺序。执行此操作后,我现在收到一个不同的错误,原来的错误消失了:
include/Rcpp/internal/Exporter.h:31:31:错误:从'SEXP'到'long-long unsigned int'[-fppermissive]
的转换无效,因为最简单的修复方法是在包中打开C++11支持。我相信我正是通过
Sys.setenv(“PKG_cxflags”=“-std=C++0x”)来实现这一点的
,我在尝试构建包之前运行它。简单地说,我将在
src/Makevars
中添加
CXX\u STD=cx11