Frage

Ich folge dem Beispiel aus dem RCPP Intro Vignette, es mit Inline versuchen.

f<-cxxfunction(signature(), plugin="Rcpp", body="
    Environment global = Environment::global_env();
    std::vector<double> vx = global['x'];
")

, aber ich einen Compiler-Fehler erhalten.

file12384509.cpp: In function 'SEXPREC* file12384509()':
file12384509.cpp:31: error: invalid use of incomplete type 'struct SEXPREC'
C:/PROGRA~1/R/R-211~1.1/include/Rinternals.h:333: error: forward declaration of 'struct SEXPREC'
file12384509.cpp:31: error: conversion from 'SEXPREC' to non-scalar type 'std::vector<double, std::allocator<double> >' requested
make: *** [file12384509.o] Error 1

ERROR(s) during compilation: source code errors or compiler configuration errors!

Program source:
  1: // includes from the plugin
  2: 
  3: #include <Rcpp.h>
  4: 
  5: 
  6: #ifndef BEGIN_RCPP
  7: #define BEGIN_RCPP
  8: #endif
  9: 
 10: #ifndef END_RCPP
 11: #define END_RCPP
 12: #endif
 13: 
 14: using namespace Rcpp;
 15: 
 16: 
 17: // user includes
 18: 
 19: 
 20: // declaration
 21: extern "C" {
 22: SEXP file12384509( ) ;
 23: }
 24: 
 25: // definition
 26: 
 27: SEXP file12384509(  ){
 28: BEGIN_RCPP
 29: 
 30: Environment global = Environment::global_env();
 31: std::vector<double> vx = global['x'];
 32: 
 33: END_RCPP
 34: }
 35: 
 36: 
Error in compileCode(f, code, language = language, verbose = verbose) : 
  Compilation ERROR, function(s)/method(s) not created! file12384509.cpp: In function 'SEXPREC* file12384509()':
file12384509.cpp:31: error: invalid use of incomplete type 'struct SEXPREC'
C:/PROGRA~1/R/R-211~1.1/include/Rinternals.h:333: error: forward declaration of 'struct SEXPREC'
file12384509.cpp:31: error: conversion from 'SEXPREC' to non-scalar type 'std::vector<double, std::allocator<double> >' requested
make: *** [file12384509.o] Error 1

Was ist falsch und ist es eine Möglichkeit, dieses Problem beheben? Dies ist nur das Spielzeug Beispiel, ich habe ein wichtiges kompliziertes Problem in Abhängigkeit von der Antwort auf diesem.

War es hilfreich?

Lösung

Vielen Dank für Ihr Interesse an RCPP ! Romain und ich schlage vor, in der Regel, dass Fragen über die RCPP-devel Liste gestellt werden; Sie sind wahrscheinlich ein paar geeignetere Augäpfel dorthin zu gelangen.

Hier fiel man in eine Falle einzelner gegen doppelte Anführungszeichen. Schalt diese machen es um alle Arbeiten. I neu geordnet auch / neu angeordneten / relabeled des Code ein wenig, während ich mit ihm spielt:

> f <- cxxfunction(signature(),
+                  body=' Environment e = Environment::global_env();  
+                         std::vector<double> vx = e["x"]; 
+                         return wrap(vx); ',
+                  plugin="Rcpp")
> x <- 3:6
> f()
[1] 3 4 5 6
> 

Edit: Für was es wert ist, hier ist die gleiche, aber eine Umgebung nach unten verläuft. Das ist, was ich mit dem ersten gespielt und die ich irgendwie wie besser

f <- cxxfunction(signature(env="environment"),
                 body=' Environment e(env); 
                        std::vector<double> vx = e["x"];
                        return wrap(vx); ',   
                 plugin="Rcpp") 

env <- new.env()
env[["x"]] <- 1:4 
f(env) 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top