Rcpp 函数错误与 STRSXP 不兼容:[type=NULL]
Rcpp function error Not compatible with STRSXP: [type=NULL]
我是 Rcpp
的新手,尝试实现一个简单的东西,但出现错误,我不知道出了什么问题。
我想要一个从 list
构造 data.frame
的函数。
我的 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].
如果您为列命名,它会起作用:
#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)
*/
我是 Rcpp
的新手,尝试实现一个简单的东西,但出现错误,我不知道出了什么问题。
我想要一个从 list
构造 data.frame
的函数。
我的 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].
如果您为列命名,它会起作用:
#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)
*/