Ya
kullanabilirsiniz:
Ben R çalıştırmak #include <Rcpp.h>
RcppExport SEXP bar(SEXP x){
throw(Rcpp::exception("My Error Message","bar.cpp",4));
return x ;
}
, bu ne alıyorum Sizin için oluşturduğu işleve try
/catch
bloğunu koyan inline paketi (iki basit makro kullanarak)
veya bloguma örneklerinden bir demet gösterildiği gibi manuel kendiniz yapmak veya örneklerde/Rcpp paketinin bölümü
ama (yani yapıyor: Bir deneyin dışında atma/catch bloğu asla işe yaramaz. eğer gördüğünüz gibi
R> library(inline)
R> f <- cxxfunction(signature(), plugin="Rcpp", body='
+ throw std::range_error("boom");
+ return R_NilValue;
+ ')
R> f()
Error in f() : boom
R>
Yine cxxfunction()
senin için burada bir try
/catch()
blok koyar: Ek bir avantaj olarak
, burada (aslında zaten birim testlerde mevcut) tam bir örnektir burada gerek sihirli ekleyin
R> f <- cxxfunction(signature(), plugin="Rcpp", body='
+ throw std::range_error("boom");
+ return R_NilValue;
+ ', verbose=TRUE)
>> setting environment variables:
PKG_LIBS = -L/usr/local/lib/R/site-library/Rcpp/lib \
-lRcpp -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib
>> LinkingTo : Rcpp
CLINK_CPPFLAGS = -I"/usr/local/lib/R/site-library/Rcpp/include"
>> Program source :
1 :
2 : // includes from the plugin
3 :
4 : #include <Rcpp.h>
5 :
6 :
7 : #ifndef BEGIN_RCPP
8 : #define BEGIN_RCPP
9 : #endif
10 :
11 : #ifndef END_RCPP
12 : #define END_RCPP
13 : #endif
14 :
15 : using namespace Rcpp;
16 :
17 :
18 :
19 : // user includes
20 :
21 :
22 : // declarations
23 : extern "C" {
24 : SEXP file4cc53282() ;
25 : }
26 :
27 : // definition
28 :
29 : SEXP file4cc53282(){
30 : BEGIN_RCPP
31 :
32 : throw std::range_error("boom");
33 : return R_NilValue;
34 :
35 : END_RCPP
36 : }
37 :
38 :
Compilation argument:
/usr/lib/R/bin/R CMD SHLIB file4cc53282.cpp 2> file4cc53282.cpp.err.txt
ccache g++-4.6 -I/usr/share/R/include \
-I"/usr/local/lib/R/site-library/Rcpp/include" \
-fpic -g0 -O3 -Wall -pipe -Wno-unused -pedantic -c file4cc53282.cpp \
-o file4cc53282.o
g++ -shared -o file4cc53282.so file4cc53282.o \
-L/usr/local/lib/R/site-library/Rcpp/lib \
-lRcpp -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib \
-L/usr/lib/R/lib -lR
R>
BEGIN_RCPP
ve END_CPP
: üzerinde verbose
açın.
Lütfen sorularınızı rcpp-devel'e taşıyın.
Teşekkür! Örneklerden, "copyMessageToR" ve "Rf_error", RcppDateExample.cpp'de kullanıldığı anlamına mı geliyor? CopyMessageToR için belge bulamadım. – highBandWidth
Aah ... ama burada sormak, sadece iyi çalışıyor, her şeyden önce dakikalar içinde mükemmel cevaplar veriyor! Benim driftimi yakaladın mı? ;) –
Evet. "Catch()" bloğunda kullandığınız şey budur. –