【发布时间】:2017-02-07 09:41:42
【问题描述】:
R 在与其他语言交互时使用标头R_ext/Complex.h,其中包括Rcomplex 类型,这似乎是std::complex<double> 的实现。使用它的标准方法是在R 中使用复数向量x_:
Rcomplex *px = COMPLEX(x_);
但是,因为我需要将它传递给armadillo,所以我这样做:
arma::cx_vec x(px, nrows(x_), false, false);
但armadillo 不接受Rcomplex 类型。我尝试过这样做:
std::complex<double> *px = COMPLEX(x_);
但得到以下error: cannot convert ‘Rcomplex*’ to ‘std::complex<double>*’ in initialization
您是否有任何线索可以将 R 中的复数向量传递给 std::complex<double> type?我知道Rcpp,但希望有一个依赖基础 R 的直接解决方案。
编辑:在其中一个 cmets 之后,我想澄清 Rcomplex 属于 C 类型,但根据 @Stephen Canon 的 answer,它与 std::complex<double> 兼容。
EDIT2:如果 Dirk 的答案没有回答“无依赖关系”问题,为什么它的投票数比接受的答案多。此外,我显然被否决了,因为如果有人想最好将基本 R 与 C 或 C++ 一起使用,那么有人不喜欢它。无论如何,我有更好的事情要做,但这不是我第一次在询问与基本 R 与 C 或 C++ 接口相关的问题时没有得到原始问题的答案,并得到了我没有要求的 Rcpp 相关答案.
【问题讨论】:
-
您是否有不想使用 RcppArmadillo 的具体原因?
-
@Roland 对于简单的事情,我通常更喜欢避免依赖,我的功能非常简单,但我想加快速度。
-
@nopeva:这就是所谓的重新发明轮子。按照同样的逻辑,你不会使用犰狳。或 R。
-
你的前提也是错误的:这似乎是 std::complex
的实现。当然不是,因为 R 仅在 C 中实现,而不在 C++ 中实现。 -
Dirk Eddelbuettel@ 在
Rcomplex是double complex类型的意义上,你是对的。但是,std::complex<double>type 已经过精心开发以使其兼容。见link