Ich möchte komplexe Nummern von R zu meinem cpp-Code mit Rcpp übergeben. Ich versuche, analog komplexe Zahlen passieren, wie ein Doppelzimmer und ganze Zahlen passieren kann:Rcpp: wie komplexe Zahl von R zu cpp übergeben
#include <complex>
#include <Rcpp.h>
using namespace Rcpp;
RcppExport SEXP mandelC(SEXP s_c) {
std::complex<double> c = ComplexVector(s_c)[0];
}
Allerdings ist der Code nicht kompilieren und beschwert sich über:
g++ -I/usr/share/R/include -DNDEBUG -I/usr/share/R/include -fopenmp -I/home/siim/lib/R/Rcpp/include -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c a.cpp -o a.o
a.cpp: In function ‘SEXPREC* mandelC(SEXP)’:
a.cpp:7:50: error: conversion from ‘Rcpp::traits::storage_type<15>::type {aka Rcomplex}’ to non-scalar type ‘std::complex<double>’ requested
std::complex<double> c = ComplexVector(s_c)[0];
^
Offensichtlich ich etwas falsch gemacht aber ich habe kann keine Beispiele finden. Kann mir jemand den richtigen Weg zeigen?
OK, so schlage vor, Sie nicht allgemeine sexp aber komplexerVektor statt zu gehen und tun Mathe mit komplexerVektor statt von std :: komplex? Gibt es eine einfache Möglichkeit, einen einzelnen (skalaren) std :: -Komplex aus ComplexVector zu holen? –
Sehr geehrter Herr Miller aka "@ Hack-R" aka: Sie wurden zweimal markiert und suspendiert; Ich bitte darum, die Bearbeitung von Posts ohne vorherige Zustimmung einzustellen. Vielen Dank. –
@OttToomet: Tun Sie sich einen Gefallen und lesen Sie schnell die Vignetten für Rcpp-Attribute. Sie können möglicherweise keinen prägnanteren Code schreiben als das, was ich hier gezeigt habe - und wo wir die Tatsache ausnutzen, dass Rcpp Dinge hinter den Kulissen für uns umwandelt. _Internally_ es wird immer eine 'SEXP' Übertragung sein. Aber ich finde die Ebene C-Schnittstelle zu umständlich, und Sie scheinen sich auch darin verlaufen zu haben. Rcpp hält eine Menge Dinge, die ziemlich einfach sein sollten ... nur das: ziemlich einfach. –