gpt4 book ai didi

r - 如何测试 Rcpp::CharacterVector 元素是否相等?

转载 作者:行者123 更新时间:2023-12-03 21:04:44 25 4
gpt4 key购买 nike

我正在尝试编写一些简单的 Rcpp 代码示例。使用 Rcpp 这非常容易和 inline包。

但我很难过如何测试两个字符元素是否相等。以下示例比较两个字符向量的第一个元素。但我无法编译它。

诀窍是什么?

library(Rcpp)
library(inline)

cCode <- '
Rcpp::CharacterVector cx(x);
Rcpp::CharacterVector cy(y);
Rcpp::LogicalVector r(1);
r[0] = (cx[0] == cy[0]);
return(r);
'

cCharCompare <- cxxfunction(signature(x="character", y="character"),
plugin="Rcpp", body=cCode)
cCharCompare("a", "b")

——

使用 == 的比较如果两个元素之一是常量,则工作得很好。以下代码编译并给出预期结果:
cCode <- '
Rcpp::CharacterVector cx(x);
Rcpp::LogicalVector r(1);
r[0] = (cx[0] == "a");
return(r);
'

cCharCompareA <- cxxfunction(signature(x="character"), plugin="Rcpp", body=cCode)

cCharCompareA("a")
[1] TRUE

cCharCompareA("b")
[1] FALSE

最佳答案

相等运算符已在 Rcpp 中引入0.10.4. string_proxy 中的实现看起来像这样类(class):

bool operator==( const string_proxy& other){
return strcmp( begin(), other.begin() ) == 0 ;
}

所以现在我们可以写:
#include <Rcpp.h>
using namespace Rcpp ;

// [[Rcpp::export]]
LogicalVector test( CharacterVector x, CharacterVector y){
Rcpp::LogicalVector r(x.size());
for( int i=0; i<x.size(); i++){
r[i] = (x[i] == y[i]);
}
return(r);
}

在我们的单元测试中使用了类似的东西:
> test(letters, letters)
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

关于r - 如何测试 Rcpp::CharacterVector 元素是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com