मैंने सी में एक फ़ंक्शन "foo" लिखा है जिसे मैं एक आर प्रोग्राम से कॉल करना चाहता हूं। फ़ंक्शन इनपुट मैट्रिक्स के रूप में कार्य करता है और इसमें कुछ ऑपरेशन करता है, (प्रत्येक तत्व में 1 जोड़ें) कहें। हालांकि यहआर सी इंटरफ़ेस: बहु-आयामी सरणी पास करना
.C("foo", n=as.integer(5), x=as.double(rnorm(5)))
foo के साथ के रूप में एक वेक्टर के लिए आसान है
void foo(int *nin, double *x)
{
int n = nin[0];
int i;
for (i=0; i<n; i++)
x[i] = x[i] * x[i];
}
मैं एक दो आयामी सरणी में कैसे पारित करना रूप में लागू किया? अगर मैं "डबल * एक्स" को "डबल ** एक्स" में बदलता हूं तो यह सेगमेंटेशन गलती देता है। किसी भी संकेतक की सराहना की।
'.C' सी कार्यक्रम के लिए परम कॉपी करने की भूमि के ऊपर समय कहते हैं तो परिणाम वापस कॉपी लक्ष्य वस्तु से पारित कर दिया _modify_ रहा है, जबकि' .Call' @transang नहीं – transang
करता है आर, तो आप _must_ इसे सी में कॉपी करें; आप 'सी() 'के साथ स्वचालित रूप से और सुरक्षित रूप से प्रतिलिपि बना सकते हैं, या मैन्युअल रूप से और'Call()' के साथ त्रुटि की उच्च संभावना के साथ कर सकते हैं। आरसीपीपी तरीके को डिर्क के जवाब में 'आरसीपीपी :: क्लोन (एम)' कथन में मेमोरी कॉपी की भी आवश्यकता होती है। निश्चित रूप से आरसीपीपी गंभीर सी-स्तर के विकास के लिए शानदार है। –