あなたは
います(つまり、何をやって:試してみるの外に投げます/ catchブロック)は動作しません。追加ボーナスとして
、ここでは(基本的にすでにユニットテストに存在していた)完全な例である:あなたがあれば見ることができるように再び
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>
、cxxfunction()
はあなたのためにここにブロックtry
/catch()
を置きますあなたがここに必要な魔法を追加
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
とEND_CPP
:あなたは上verbose
をオンにします。
を入力してください質問をrcpp-develに転送してください。
をありがとう!例から、RcppDateExample.cppで使われている 'copyMessageToR'と' Rf_error'を意味しますか?私は 'copyMessageToR'のドキュメントを見つけることができませんでした。 – highBandWidth
ああ...しかし、ここに尋ねるだけでうまくいくように見え、結局数分で素晴らしい答えが得られるようです!私のドリフトをキャッチ? ;) –
はい。これは 'catch()'ブロックで使用するものです。 –