Estoy tratando de escribir algunos ejemplos de código Rcpp simples. Esto es notablemente fácil con los paquetes Rcpp
y inline
.Cómo probar elementos de Rcpp :: CharacterVector para la igualdad?
Pero estoy perplejo sobre cómo probar si dos elementos de carácter para la igualdad. El siguiente ejemplo compara los primeros elementos de dos vectores de caracteres. Pero no puedo hacer que compile.
¿Cuál es el truco?
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")
-
La comparación utilizando ==
funciona perfectamente bien si uno de los dos elementos es una constante. El código siguiente se compila y da resultados esperados:
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
¿Dónde está 'prueba 'definido? – James
¿Por qué configuras las cosas en NULL antes de configurarlas con cxxfunction? – Spacedman
@James Disculpas: debería haber leído 'cx [0] == cy [0]' - editado. – Andrie