@ হ্যাডলি: দুর্ভাগ্যক্রমে, আপনাকে সি ++ শুরু করতে সহায়তা করার জন্য আমার মনে মনে নির্দিষ্ট সংস্থান নেই। আমি স্কট মেয়ার্সের বইগুলি থেকে এটি গ্রহণ করেছি (কার্যকর সি ++, আরও কার্যকর সি ++, ইত্যাদি ...) তবে এগুলি আসলে কোনও নয় যা পরিচিতি বলতে পারে।
আমরা প্রায় একচেটিয়াভাবে সি ++ কোড কল করতে। কল কলটি ব্যবহার করি। নিয়মটি যথেষ্ট সহজ:
- সি ++ ফাংশন অবশ্যই একটি আর বস্তু ফেরত দিতে হবে। সমস্ত আর অবজেক্টগুলি এসএএক্সপি হয়।
- সি ++ ফাংশনটি 0 থেকে 65 আর অবজেক্ট হিসাবে ইনপুট হিসাবে নেয় (আবার এসএক্সপি)
- এটি অবশ্যই (সত্যই নয়, তবে আমরা এটি পরে সংরক্ষণ করতে পারি) সি লিঙ্কেজের সাথে ঘোষণা করা হবে, হয় বাহ্যিক "সি" বা আরসিপিএক্সপোর্ট উপনাম যা আরসিপিপি সংজ্ঞায়িত করেছে।
সুতরাং একটি। কল ফাংশনটি কিছু শিরোলেখ ফাইলটিতে এভাবে ঘোষিত হয়:
#include <Rcpp.h>
RcppExport SEXP foo( SEXP x1, SEXP x2 ) ;
এবং .cpp ফাইলে এর মতো প্রয়োগ করা হয়েছে:
SEXP foo( SEXP x1, SEXP x2 ){
...
}
আরসিপিপি ব্যবহার করার জন্য আর এপিআই সম্পর্কে আরও অনেক কিছু জানার নেই।
বেশিরভাগ লোক কেবল আরসিপ্পিতে সংখ্যার ভেক্টরগুলির সাথে ডিল করতে চান। আপনি এই সংখ্যাটিভেক্টর ক্লাস দিয়ে। একটি সাংখ্যিক ভেক্টর তৈরির বিভিন্ন উপায় রয়েছে:
আপনি আর থেকে নিচে থাকা একটি বিদ্যমান অবজেক্ট থেকে:
SEXP foo( SEXP x_) {
Rcpp::NumericVector x( x_ ) ;
...
}
প্রদত্ত মান সহ :: স্ট্যাটিক ফাংশন তৈরি করে:
Rcpp::NumericVector x = Rcpp::NumericVector::create( 1.0, 2.0, 3.0 ) ;
Rcpp::NumericVector x = Rcpp::NumericVector::create(
_["a"] = 1.0,
_["b"] = 2.0,
_["c"] = 3
) ;
প্রদত্ত আকারের:
Rcpp::NumericVector x( 10 ) ; // filled with 0.0
Rcpp::NumericVector x( 10, 2.0 ) ; // filled with 2.0
তারপরে একবার আপনার ভেক্টর হয়ে গেলে সবচেয়ে কার্যকর জিনিসটি এটি থেকে একটি উপাদান বের করা। এটি 0-ভিত্তিক ইনডেক্সিং সহ অপারেটরের সাথে [] করা হয়, সুতরাং উদাহরণস্বরূপ একটি সংখ্যাসূচক ভেক্টরের সমষ্টিগত মানগুলি এরকম কিছু হয়:
SEXP sum( SEXP x_ ){
Rcpp::NumericVector x(x_) ;
double res = 0.0 ;
for( int i=0; i<x.size(), i++){
res += x[i] ;
}
return Rcpp::wrap( res ) ;
}
তবে আরসিপিপি চিনির সাথে আমরা এখন আরও সুন্দরভাবে এটি করতে পারি:
using namespace Rcpp ;
SEXP sum( SEXP x_ ){
NumericVector x(x_) ;
double res = sum( x ) ;
return wrap( res ) ;
}
যেমনটি আমি আগেই বলেছি, এটি নির্ভর করে আপনি কোন ধরণের কোড লিখতে চান তার উপর। লোকেরা যে প্যাকেজগুলিতে আরসিপ্পের উপর নির্ভর করে তাদের কী করে দেখুন, ভিগনেটগুলি পরীক্ষা করুন, ইউনিট পরীক্ষা করুন, মেলিং তালিকায় আমাদের কাছে ফিরে আসুন। আমরা সবসময় সাহায্য করে খুশি।