मैं एक ऐसा फ़ंक्शन लिखना चाहता हूं जो किसी दिए गए इंडेक्स पर अनुक्रमिक रूप से एक वेक्टर में 'स्ट्रिंग' स्लाइस करता है। मेरे पास इसके लिए पर्याप्त पर्याप्त समाधान है; हालांकि, मुझे लगता है कि सी/सी ++ में कोड लिखना शायद तेज होगा। उदाहरण के लिए, मैं इस प्रकार एक समारोह 'strslice' है कि संचालित लिखने में सक्षम होना चाहते हैं:आर/आरसीपीपी के साथ लगातार सूचकांक पर एक स्ट्रिंग स्लाइस?
x <- "abcdef"
strslice(x, 2) ## should return c("ab", "cd", "ef")
हालांकि, मैं कैसे 'CharacterVector' में चारों ओर से पारित कर दिया की इलाज के तत्वों को संभालने के लिए यकीन नहीं है स्ट्रिंग के रूप में आरसीपीपी कोड। यह मैं क्या सोच भी काम कर सकते हैं (सी ++/Rcpp ज्ञान की मेरी अभाव को देखते हुए मैं वहाँ एक बेहतर तरीका है यकीन है) है:
f <- rcpp(signature(x="character", n="integer"), '
std::string myString = Rcpp::as<std::string>(x);
int cutpoint = Rcpp::as<int>(n);
vector<std::string> outString;
int len = myString.length();
for(int i=0; i<len/n; i=i+n) {
outString.push_back(myString.substr(i,i+n-1));
myString = myString.substr(i+n, len-i*n);
}
return Rcpp::wrap<Rcpp::CharacterVector>(outString);
')
रिकॉर्ड के लिए, इसी आर कोड रहा है:
strslice <- function(x, n) {
x <- as.data.frame(stringsAsFactors=FALSE,
matrix(unlist(strsplit(x, "")), ncol=n, byrow=T)
)
do.call(function(...) { paste(..., sep="") }, x)
}
... लेकिन मैं डेटा संरचनाओं के बीच चारों ओर कूदते हुए बहुत अधिक तारों के साथ चीजों को धीमा कर दूंगा।
:
आपको शायद बायोस्टर्स पैकेज को देखना चाहिए। –