C++ Rcpp,创建向量为long的数据帧

C++ Rcpp,创建向量为long的数据帧,c++,r,rcpp,C++,R,Rcpp,我有一系列的向量,我将它们添加到数据帧对象中,以返回到R。 当我尝试添加带有长元素的向量时,问题就出现了 // [[Rcpp::export]] DataFrame test() { std::vector<long long> x; return DataFrame::create(Named("x") = x); } /[[Rcpp::export]] 数据帧测试() { std::向量x; 返回DataFrame::create(命名为(“x”)=x); } 返回的错误是

我有一系列的向量,我将它们添加到数据帧对象中,以返回到R。 当我尝试添加带有长元素的向量时,问题就出现了

// [[Rcpp::export]]
DataFrame test()
{
std::vector<long long> x;
return DataFrame::create(Named("x") = x);
}
/[[Rcpp::export]]
数据帧测试()
{
std::向量x;
返回DataFrame::create(命名为(“x”)=x);
}
返回的错误是

g++-m64-I“C:/R/R-30~1.1/include“-DNDEBUG-I”C:/R/R-3.0.1/library/Rcpp/include“-I”d:/rccompile/CRANpkg/extralibs64/local/include“-O2-Wall-mtune=core2-C quotes.cpp-o quotes.o,包含在C:/R/R-3.0.1/library/include/RcppCommon.h:117:0文件中,来自C:/R/R-3.0.1/Rcpp/include/Rcpp.h:27,来自quotes.cpp:1:C:/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:函数'sexprc*Rcpp::internal::wrap\u dispatch\u unknown\u iterable(const T&,Rcpp::traits::false\u type)[带T=long-long int,SEXP=sexprc*,Rcpp::traits::false\u type=Rcpp::traits::integral\u常量]“:C:/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:691:98:从'sexprc*Rcpp::internal::wrap\u dispatch\u unknown(const T&,Rcpp::traits::false\u type)[带T=long-long int,SEXP=sexprc*,Rcpp::traitts::false\u type=Rcpp::traits::integrated\u常量]'C:/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:723:96:从'sexprc*Rcpp::internal::wrap\u dispatch\u eigen(const T&,Rcpp::traits::false\u type)[带T=long-long int,SEXP=sexprc*,Rcpp::traitts::false\u type=Rcpp::traits::integral\u常量]'C:/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:740:80:从'sexprc*Rcpp::internal::wrap\u dispatch\u unknown\u importable(const T&,Rcpp::traits::false\u type)[带T=long long int,SEXP=sexprc*,Rcpp::traits::false\u type=Rcpp::traits::integral\u常量]'C:/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:760:99:实例化自'SEXPREC*Rcpp::internal::wrap_dispatch(const T&,Rcpp::traits::wrap_type_unknown_标记)[带T=long long int,SEXP=SEXPREC*]C:/R/R-3.0.1/library/Rcpp/include/Rcpp/Rcpp/internal/Rcpp/internal/wrap.h:863:104:实例化自'SEXPREC*Rcpp::wrap(const T&)[with T=long-long int,SEXP=SEXPREC*]'C:/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:193:3:[跳过14个实例化上下文]C:/R/R-3.0.1/library/Rcpp/include/Rcpp/vector/vector.h:395:9:从“静态无效Rcpp::vector::replace\U元素\U分派”实例化[使用U=Rcpp::traits::named_object>,int RTYPE=19,Rcpp::truts::true\U type=Rcpp::traits::integral_常量,Rcpp::Vector::iterator=Rcpp::internal::Proxy\U iterator>,SEXP=SEXPREC*]'C:/R/R-3.0.1/library/Rcpp/include/Rcpp/Vector/Vector.h:384:9:从“静态无效Rcpp::Vector::replace\U元素”实例化(Rcpp::Vector::iterator,SEXP,int,const U&)[带U=Rcpp::traits::named_object>,int RTYPE=19,Rcpp::Vector::iterator=Rcpp::internal::Proxy_iterator>,SEXP=sexprc*]“C:/R/R-3.0.1/library/Rcpp/include/Rcpp/Rcpp/generated/Vector_create.h:318:2:从“静态Rcpp::向量Rcpp::向量Rcpp::向量Rcpp::向量::向量::创建”实例化(Rcpp::traits::true_type,常数T1&,常数T2&,常数T3&,常数T4&,常数T5&,常数T6&)[T1=Rcpp::traits::named_object>,T2=Rcpp::traits::named_object>,T3=Rcpp::traits::named_object>,T4=Rcpp::traits::named_object>,T5=Rcpp::traits::named_object>,int RTYPE=19,Rcpp::Vector=Rcpp::Vector,Rcpp::traits::true_type=Rcpp::traits::traits::integral_常量]'C:/R/R-3.0.1/library/Rcpp/include/Rcpp/generated/Vector\uuuu create.h:288:37:从'static Rcpp::Vector Rcpp::Vector::create'实例化(常数T1&,常数T2&,常数T3&,常数T4&,常数T5&,常数T6&)[T1=Rcpp::traits::named_object>、T2=Rcpp::traits::named_object>、T3=Rcpp::traits::named_object>、T4=Rcpp::traits::named_object>、T5=Rcpp::traits::named_object>、T6=Rcpp::traits::named_object>、int RTYPE=19、Rcpp::Vector=Rcpp::Vector]'C:/R/R-3.0.1/library/Rcpp/include/Rcpp/generated/DataFrame_generated.h:59:73:从'static Rcpp::DataFrame Rcpp::DataFrame::create'实例化(常数T1&,常数T2&,常数T3&,常数T4&,常数T5&,常数T6&)[T1=Rcpp::traits::named_object>,T2=Rcpp::traits::named_object>,T3=Rcpp::traits::named_object>,T4=Rcpp::traits::named_object>,T5=Rcpp::traits::named_object>,T6=Rcpp::traits::named_object>,Rcpp::DataFrame=Rcpp::DataFrame]'quotes.cpp:58:26:从此处实例化C:/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:474:11:错误:从'long-long-int'到'SEXP'[-fppermissive]make的转换无效::[quotes.o]错误1


有没有一种方法可以将这种类型的向量添加到数据帧中?

遗憾的是,没有,因为CRAN只允许使用C标准,而不允许使用long


此外,R本身只有数字(也称为double)和整数。因此我建议您只使用double作为类型。

@CauchyDistributedRV不再
RJSONIO::fromJSON(“[12345678912]”)
give
[1]1.2346e+10
实现这一点的最佳方法是通过为long-long-vector www.cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-extensing.pdf编写自己的
wrap
来扩展
Rcpp
。谢谢你的回答,我最终使用了无符号整数,一切都按预期进行。不过r只有有符号整数,所以你要使用h如果您在其中输入的值大于
2^31-1
,则会出现溢出问题。如果您需要更高的精度,请使用
double
。另请参见:Craig:并通过单击勾号和/或向上投票来“接受”答案。正如@CauchyDistributedRV所述,uint存在问题,因为R没有。我仍然建议doub乐。