Rcpp函数错误与STRSXP不兼容:[type = NULL]

时间:2018-04-23 08:11:52

标签: r rcpp

我对Rcpp很新,并试图实现一个简单的事情,但我得到一个错误,不知道什么是错的。 我想要一个从data.frame构造list的函数。 我的cpp文件如下所示:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
DataFrame makeDF(List x) {
  NumericVector a = x["a"];
  NumericVector b = x["b"];
  NumericVector n = x["n"];
  const int n2 = n[0];

  NumericVector a2 = NumericVector(n2, a[0]);
  NumericVector b2 = NumericVector(n2, b[0]);

  DataFrame df = DataFrame::create(a2, b2);

  return df;
}

然后在R中写道:

library(Rcpp)
sourceCpp("./cppcode/check_makeDF.cpp")
# no errors here, it compiles OK
x <- list(a = 2.5, b = 1.1, n = 5)
makeDF(x)
# Error in makeDF(x) :Not compatible with STRSXP: [type=NULL].

1 个答案:

答案 0 :(得分:3)

如果您为列命名,则可以使用:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
DataFrame makeDF(List x) {
  NumericVector a = x["a"];
  NumericVector b = x["b"];
  NumericVector n = x["n"];
  const int n2 = n[0];

  NumericVector a2 = NumericVector(n2, a[0]);
  NumericVector b2 = NumericVector(n2, b[0]);

  DataFrame df = DataFrame::create(Named("a") = a2, 
                                   Named("b") = b2);

  return df;
}
/*** R
x <- list(a = 2.5, b = 1.1, n = 5)
makeDF(x)
*/