का उपयोग करके रिकर्सन के लिए न्यूमेरिक वेक्टर में तत्व को कैसे निकालें I आर के लिए आरसीपीपी पैकेज का उपयोग करने के बारे में और जानने के लिए प्रयास कर रहा था। इसलिए मैंने आरसीपीपी का उपयोग करके मूल सॉर्टिंग एल्गोरिदम का परीक्षण करना शुरू किया। मैं हैडली विकम ट्यूटोरियल here में शुरू कर रहा था।आर और आरसीपीपी
मैं सफलतापूर्वक प्रविष्टि प्रकार रिकर्सिवली इस तरह से लागू किया:
cppFunction("
NumericVector insertionsortRC(NumericVector vetor) {
int n = vetor.size();
double aux;
int i;
if(n>1) {
vetor.erase(n-1);
insertionsortRC(vetor);
aux=vetor[n-1];
i=n-1;
while(vetor[i-1]>aux && i>=0) {
vetor[i]=vetor[i-1];
i--;
}
vetor[i]=aux;
}
return vetor;
}
")
मुझे लगता है कि erase एक अच्छा विचार यहाँ नहीं था:
library(Rcpp)
vetor<-sample(100)
vetor
cppFunction("
NumericVector insertionsortRC(NumericVector vetor, int n) {
double aux;
int i;
if(n>1) {
insertionsortRC(vetor,n-1);
aux=vetor[n-1];
i=n-1;
while(vetor[i-1]>aux && i>=0) {
vetor[i]=vetor[i-1];
i--;
}
vetor[i]=aux;
}
return vetor;
}
")
लेकिन समारोह 2 तर्कों के लिए पूछना है, तो मैं इस तरह से करने की कोशिश की , ऐसा लगता है कि मैं स्मृति से तत्व मिटा देता हूं और रिकर्सन कॉल के बाद इसे बाद में पुनर्प्राप्त नहीं कर सकता। मैंने सोचा कि समस्या vetor.erase (एन -1) पर हो सकती है; लाइन, vetor.erase (एन) की कोशिश की; और यह संकलित, लेकिन बिल्कुल काम नहीं किया।
vetor.erase (n) के साथ;
insertionsortRC (Vetor) * `में/usr/lib/आर/bin/कार्यकारी/आर 'त्रुटि: malloc(): स्मृति भ्रष्टाचार: 0x098db548 *
मैं आर में निम्न त्रुटि मिला
vetor.erase (n-1) के साथ;
insertionsortRC (Vetor) [1] 3.607393e-313 3.300000e + 01 + 01 3.100000e 8.600000e + 01 + 01 2.500000e 7.000000e + 01 [7] 4.000000e: यह एक अजीब उत्पादन मिला +01 8.800000e + 01 8.100000e + 01 1.300000e + 01 8.500000e + 01 8.700000e + 01 [13] 3.900000e + 01 6.000000e + 01 6.400000e + 01 1.000000e + 01 8.200000e + 01 8.900000e + 01 [1 9] 1.400000e + 01 6.600000e + 01 3.600000e + 01 1.500000e + 01 9.600000e + 01 2.600000e + 01 [25] 4.000000e + 00 5.400000e + 01 2.900000e + 01 8.300000e + 01 5.500000e +01 6.800000e + 01 [31] 9.100000e + 01 6.000000e + 00 1.000000e + 02 5.100000e + 01 7.000000e + 00 5.300000e + 01 [37] 9.900000e + 01 6.500000e + 01 2.300000e + 01 9 .400000e + 01 5.700000e + 01 9.000000e + 01 [43] 3.200000e + 01 4.700000e + 01 1.600000e + 01 5.000000e + 01 2.800000e + 01 3.000000e + 00 [4 9] 9.800000e + 01 1.100000e +01 1.800000e + 01 7.600000e + 01 6.300000e + 01 7.700000e + 01 [55] 7.400000e + 01 4.900000e + 01 8.000000e + 00 9.700000e + 01 1.200000e + 01 2.700000e + 01 [61] 3.500000e + 01 7.900000e + 01 8.000000e + 01 2.000000e + 01 6.700000e + 01 9.300000e + 01 [67] 5.000000e + 00 5.600000e + 01 9.000000e + 00 3.700000e + 01 2.400000e + 01 9.200000e +01 [73] 6.900000e + 01 3.800000e + 01 4.400000e + 01 1.700000e + 01 4.600000e + 01 4.300000e + 01 [7 9] 3.400000e + 01 1.900000e + 01 2.000000e + 00 9.500000e + 01 7.200000e + 01 1.000000e + 00 [85] 6.100000e + 01 4.100000e + 01 6.200000e + 01 2.200000e + 01 4.200000e + 01 2.100000e + 01 [ 91] 8.400000e + 01 + 01 4.800000e 7.800000e + 01 + 01 7.300000e 3.000000e + 01 + 01 5.900000e [97] 5.800000e + 01 + 01 5.200000e 7.500000e + 01
सकता है कोई मुझे बताएं कि: 01. क्या इस कोड को इस तरह कार्यान्वित करना संभव है, आरसीपीपी और आर का उपयोग करके, फ़ंक्शन को केवल एक तर्क के साथ कॉल करना, डेटा का वेक्टर? 02. इसे सही तरीके से कैसे करें?