Как читать вектор как CharacterVector в Rcpp

Как я могу прочитать r вектор как CharacterVector в Rcpp

У меня есть функция

library(Rcpp)
cppFunction('String readC(CharacterVector x) {
               for (int j=0; j < x.size(); j++)
                 Rcout << x[j] << std::endl;
               return "Yes";
 }')

В зависимости от ввода он преобразуется в другой тип.

readC(c(TRUE,NA,1, 'Yes'))
$TRUE
$NA
$1
$Yes
readC(c(TRUE,NA,1))
$1
$NA
$1
readC(c(TRUE,NA))
$TRUE
$NA

Как я могу изменить функцию, чтобы ожидаемый результат в вышеуказанных случаях TRUE, NA, 1, Yes, TRUE, NA, 1 а также TRUE, NA,

1 ответ

Попробуйте это и поймите, что C(++) напечатан. Итак, имея CharacterVector аргумент означает... все его компоненты являются символами. Для которого NA, но TRUE а также FALSE конвертируются до того, как вы их получите:

R> cppFunction('String readC(CharacterVector x) {
+                for (int j=0; j < x.size(); j++) print(x[j]);
+                return "Yes";
+             }')
R> readC(c(NA, Inf, -Inf, NaN, TRUE, FALSE, 42))
<CHARSXP: NA>
<CHARSXP: "Inf">
<CHARSXP: "-Inf">
<CHARSXP: "NaN">
<CHARSXP: "1">
<CHARSXP: "0">
<CHARSXP: "42">
[1] "Yes"
R> 
Другие вопросы по тегам