प्राप्त करना मैंने अभी आर सीखना शुरू किया, इस प्रकार छोटे दिखने वाले मुद्दों से फंस गया। मैं यह पता लगाने की कोशिश कर रहा हूं कि आर। ++ में मूल्यों का उत्पादन कैसे किया जाता है, हम बस रिटर्न वैरिएबल का उपयोग करते हैं, लेकिन ऐसा लगता है कि आर के साथ ऐसा नहीं लगता है। मेरे पास एक ऐसा फ़ंक्शन है जो 4 इनपुट तर्क लेता है, उन तर्कों को पास करता है सी ++ फ़ंक्शन जो आवश्यक गणना करता है, अब अगर मैं आर में यह myfun लोड करना चाहता हूं और C++ funciton से आउटपुट प्राप्त करना चाहता हूं, तो मुझे क्या करने की ज़रूरत है? निम्नलिखित टेम्पलेट का उपयोग करने का प्रयास कर रहा हूं।सी ++ और आर इंटरफ़ेस, आउटपुट
extern "C" {
SEXP myfun(SEXP S, SEXP A, SEXP B, SEXP C) { //will call this function from R.
SEXP rate, dir, list, list_names; //declare variables
PROTECT(rate = allocMatrix(REALSXP, 10, 2)); //allocate 10x2 matrix of double type?
PROTECT(dir = allocVector(INTSXP, 10)); //allocated vector(10) of int type?
double* p_rate = REAL(rate); //why do I need pointers?
int* p_dir = INTEGER(dir);
यहाँ // मैं एक सी ++ समारोह जो vector<vector<double> > someVal
और vector<int> someVal2
की गणना करता है कहते हैं।
अब मैं उन मानों को दर और डीआईआर में पास करना चाहता हूं।
for(int i =0; i < 10; i++){
rate[i][0] = someVal1[i][0];
rate[i][1] = someVal1[i][1];
dir[i] = someVal2[i];
}
लेकिन संकलक इसे पसंद नहीं करता है। मुझे यकीन नहीं है कि इस मामले में p_rate और p_dir पॉइंटर्स का उपयोग कैसे करें।
इसके अलावा, मुझे समझ में नहीं आ रहा है कि निम्न कोड यह तरीका क्यों है। ऐसा लगता है कि सूची और नामों के लिए तार, दर और डीआईआर गुजर रहा है और दर और डीआईआर के मूल्य। हम बस क्यों नहीं कर सकते हैं और वांछित मूल्यों को मुद्रित नहीं कर सकते?
char *tag[2] = {"rate","dir"};
PROTECT(list_names = allocVector(STRSXP ,2));
SET_STRING_ELT(list_names, 0, mkChar(tag[0]));
SET_STRING_ELT(list_names, 1, mkChar(tag[1]));
PROTECT(list = allocVector(VECSXP ,2));
SET_VECTOR_ELT(list, 0, rate);
SET_VECTOR_ELT(list, 1, dir);
setAttrib(list, R_NamesSymbol , list_names);
UNPROTECT(8);
return (list);
}
मुझे आर में चर को वापस करने के पीछे मूल विचार नहीं मिल रहा है, यह बहुत भ्रमित लगता है। मैं वास्तव में सराहना करता हूं अगर कोई मुझे उन उचित संसाधनों को इंगित कर सकता है जो इन सामानों को बताते हैं।
अग्रिम में आपकी सहायता के लिए धन्यवाद!