我正在尝试使用Rcpp来加速我在R中使用的一些代码。但是我遇到了麻烦。
我的矢量看起来像:
vec
[1] "Aa" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa"
但对于我的矢量的某些随机部分,我想要反转字符串(如aA
)。
在我的R代码中,我正在使用stringi::stri_reverse
,它以直截了当的方式完成我想要的工作。我试图在C ++上实现类似的方法,但我遇到了麻烦!
基本上,我正在尝试将每个vec[i]
拆分为"A" "a"
,然后使用std::reverse
,然后使用here中的函数进行连接。为此:
[1] "Aa" "aA" "aA" "aA" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa"
我认为这不会比stri_reverse
更快(实际上可能会慢得多)(我猜这是一个C函数)。实现这一目标的最佳方法是什么?导入stringi::stri_reverse
以在我的Rcpp代码上使用?复制stri_reverse
代码(我不知道怎么做,但我可以搞清楚)并加入我的Rcpp函数?我正在尝试这两天,我非常感谢你们的任何帮助。
编辑:
到目前为止这是我的Rcpp代码(我从here得到了它):
CharacterVector stri_reverseC(String input, int n) {
std::string myString = input;
int cutpoint = n;
int len = myString.length();
int nout = len / cutpoint ;
CharacterVector out( nout ) ;
for( int i=0; i<nout; i++ ) {
out[i] = myString.substr( cutpoint*i, 1 ) ;
}
std::reverse(out.begin(), out.end());
out = concat(out);
return out;
}