【问题标题】:Rcpp, creating a dataframe with a vector of long longRcpp,创建一个带有 long long 向量的数据框
【发布时间】:2013-07-07 16:12:44
【问题描述】:

我有一系列向量,我将它们添加到 DataFrame 对象中以返回到 R。 当我尝试添加一个带有 long long 元素的向量时,问题就来了。

// [[Rcpp::export]]
DataFrame test()
{
std::vector<long long> x;
return DataFrame::create(Named("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:/ RCompile/CRANpkg/extralibs64/local/include" -O2 -Wall -mtune=core2 -c quotes.cpp -o quotes.o 在从 C:/R/R-3.0.1/library/Rcpp/include/RcppCommon 包含的文件中.h:117:0,来自 C:/R/R-3.0.1/library/Rcpp/include/Rcpp.h:27,来自quotes.cpp:1: C:/R/R-3.0.1/library /Rcpp/include/Rcpp/internal/wrap.h: 在函数 'SEXPREC* Rcpp::internal::wrap_dispatch_unknown_iterable(const T&, Rcpp::traits::false_type) [with T = long long int, SEXP = SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_constant]': C:/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:691:98: 从'实例化SEXPREC* Rcpp::internal::wrap_dispatch_unknown(const T&, Rcpp::traits::false_type) [with T = long long int, SEXP = SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_constant] ' C:/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:723:96: 从 'SEXPREC* 实例化Rcpp::internal::wrap_dispatch_eigen(const T&, Rcpp::traits::false_type) [with T = long long int, SEXP = SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_constant]' C :/R/R-3.0.1/library/Rcpp/include/Rcpp/internal/wrap.h:740:80: 从 'SEXPREC* Rcpp::internal::wrap_dispatch_unknown_importable(const T&, Rcpp::traits:: false_type) [with T = long long int, SEXP = SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_constant]' 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_tag) [with T = long long int, SEXP = SEXPREC*]' C :/R/R-3.0.1/library/Rcpp/include/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: insta从 'static void Rcpp::Vector::replace_element__dispatch(Rcpp::traits::true_type, Rcpp::Vector::iterator, SEXP, int, const U&) [with U = Rcpp::traits::named_object >, int RTYPE = 19, Rcpp::traits::true_type = Rcpp::traits::integral_constant, Rcpp::Vector::iterator = Rcpp::internal::Proxy_Iterator >, SEXP = SEXPREC*]' C:/R/R- 3.0.1/library/Rcpp/include/Rcpp/vector/Vector.h:384:9: 实例化自'static void Rcpp::Vector::replace_element(Rcpp::Vector::iterator, SEXP, int, const U&) [与 U = Rcpp::traits::named_object >, int RTYPE = 19, Rcpp::Vector::iterator = Rcpp::internal::Proxy_Iterator >, SEXP = SEXPREC*]' C:/R/R-3.0。 1/library/Rcpp/include/Rcpp/generated/Vector_create.h:318:2: 从 'static Rcpp::Vector Rcpp::Vector::create_dispatch(Rcpp::traits: :true_type, const T1&, const T2&, const T3&, const T4&, const T5&, const T6&) [with T1 = Rcpp::traits::named_object >, T2 = Rcpp::traits::named_object >, T3 = Rcpp::特征::named_object >, T4 = Rcpp::trai ts::named_object >, T5 = Rcpp::traits::named_object >, T6 = Rcpp::traits::named_object >, int RTYPE = 19, Rcpp::Vector = Rcpp::Vector, Rcpp::traits ::true_type = Rcpp::traits::integral_constant]' C:/R/R-3.0.1/library/Rcpp/include/Rcpp/generated/Vector__create.h:288:37: 从 'static Rcpp::Vector 实例化Rcpp::Vector::create(const T1&, const T2&, const T3&, const T4&, const T5&, const T6&) [with 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(const T1&, const T2&, const T3&, const T4&, const T5&, const T6&) [with 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' 的无效转换 [-fpermissive] 使: * [quotes.o] 错误 1。

有没有办法将这种类型的向量添加到 DataFrame 中?

【问题讨论】:

  • @CauchyDistributedRV 不再是RJSONIO::fromJSON('[12345678912]')[1] 1.2346e+10
  • 实现这一目标的最佳方法是扩展Rcpp,为长向量编写自己的wrap www.cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-扩展.pdf

标签: c++ r rcpp


【解决方案1】:

遗憾的是,没有,因为 CRAN 只允许没有 long long 的 C 标准。

另外,R 本身只有数字(又名双精度)和整数。所以我建议你只使用 double 作为类型。

【讨论】:

  • 感谢您的回答,我最终使用了无符号整数,一切正常。
  • R 仅具有签名整数,因此如果您将任何大于 2^31-1 的值放入其中,您将遇到溢出问题。如果您需要额外的精度,请使用double。另见:stackoverflow.com/questions/2053397/…
  • Craig:点击勾选标记和/或投赞成票,随时“接受”答案。正如@CauchyDistributedRV 提到的, uint 有问题,因为 R 没有它。我仍然建议加倍。
猜你喜欢
  • 2015-09-15
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多