Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于子集字符串的Rcpp函数_C++_R_Rcpp - Fatal编程技术网

C++ 用于子集字符串的Rcpp函数

C++ 用于子集字符串的Rcpp函数,c++,r,rcpp,C++,R,Rcpp,我想知道是否有一个Rcpp函数,它将Rcpp::String数据类型作为输入,并返回字符串的给定字符(按索引)。例如,提取字符串索引0处的字符。这将等同于代码>字符串::从C++中的字符串头中的< 方法。我写过这样的话: using namespace Rcpp; using namespace std; typedef vector<string> stringList; int SplitGenotypesA(string s) { char a = s.at(0);

我想知道是否有一个Rcpp函数,它将
Rcpp::String
数据类型作为输入,并返回字符串的给定字符(按索引)。例如,提取字符串索引0处的字符。这将等同于<>代码>字符串::从C++中的<代码>字符串头中的< <代码>方法。我写过这样的话:

using namespace Rcpp;
using namespace std;

typedef vector<string> stringList;

int SplitGenotypesA(string s) {
    char a = s.at(0);
    int b = a - '0';
    return b;
}
使用名称空间Rcpp;
使用名称空间std;
typedef向量字符串列表;
int(字符串s){
字符a=s.at(0);
int b=a-‘0’;
返回b;
}
但不希望在Rcpp::String和std::String类型之间进行转换


多谢各位

> p>可以使用> RCPP::Strimvector V< /C>将字符串R向量直接馈送到C++。这显然也会处理单个元素

获取向量第i个元素的第n个字符与
向量[i][n]
一样简单

因此,不使用
std::string
您可以执行以下操作:

#包括
//[[Rcpp::导出]]
Rcpp::NumericVector(Rcpp::StringVector R\u character\u vector)
{
int number_of_string=R_character_vector.size();
Rcpp::NumericVector结果(字符串的数量);
for(int i=0;i<字符串的个数;++i)
{
字符a=R_字符向量[i][0];
结果[i]=a-‘0’;
}
返回结果;
}
现在在R中,您可以执行以下操作:

esa(“9C”)
# [1] 9
或者更好

esa(c(“1A”、“2B”、“9C”))
# [1] 1 2 9
这甚至比做同样事情的原生R方法快一点:

microbenchmark::microbenchmark(
R_方法=数值形式(substr(c(“1A”,“2B”,“9C”),1,1)),
Rcpp_方法=ESA(c(“1A”、“2B”、“9C”),
次数=1000)
#单位:微秒
#expr最小lq平均uq最大neval
#R_方法3.422 3.765 4.076722 4.107 4.108 46.881 1000
#Rcpp_方法3.080 3.423 3.718779 3.765 3.765 32.509 1000

谢谢您的回答。我想知道是否有可能做类似的事情,但是使用CharacterMatrix,将矩阵的特定元素和字符串的字符子集,比如R_character_matrix(2,3)[1]?是@sahwahn。如果R中有多个字符字符串的R xC矩阵,则可以将其传递给C++作为特征矩阵,并通过矩阵(r,c)[i]访问矩阵中任何字符串的第i个字符。记住使用零索引。