продолжение этого вопроса:
В Rcpp, как получить пользовательскую структуру из C в R
Как вы получаете шаблон Rcpp для возврата строк и чисел, а не какой-то тип "Векторы"? Я пытаюсь перенести чужой C-код в R, и они используют все виды различных типов данных (char, unsigned char, short, unsigned short, int, float, long int, long unsigned int, double - нет, на самом деле, все они находятся в самом заголовке!), что мне нужно "привести" в строки и числа в R. Видя комментарий от "Ralf Stubner", я изменил ваш пример, чтобы сгенерировать MWE, показывающий проблему:
#include <RcppCommon.h>
typedef struct {
char firstname[128];
// long unsigned int big_number;
} HEADER_INFO;
namespace Rcpp {
template <>
SEXP wrap(const HEADER_INFO& x);
}
#include <Rcpp.h>
namespace Rcpp {
template <>
SEXP wrap(const HEADER_INFO& x) {
Rcpp::CharacterVector firstname(x.firstname, x.firstname + 128);
// Rcpp::Integer big_number(x.big_number);
return Rcpp::wrap(Rcpp::List::create(Rcpp::Named("firstname") = firstname
// ,Rcpp::Named("big_number") = big_number
));
};
}
// [[Rcpp::export]]
HEADER_INFO getHeaderInfo() {
HEADER_INFO header;
strcpy( header.firstname, "Albert" );
// header.big_number = 123456789012345;
return header;
}
/*** R
getHeaderInfo()
*/
Когда вы запускаете это в R:
> getHeaderInfo()
$firstname
[1] "65" "108" "98" "101" "114" "116" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
[19] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
[37] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
[55] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
[73] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
[91] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
[109] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "127" "16"
[127] "72" "-29"
Длинные записи без знака закомментированы, потому что я не смог найти тип данных в пространстве имен Rcpp, который будет компилироваться. Правда ли, что такие типы, как "Rcpp :: Integer" и "Rcpp :: Double" не существуют? Если мне нужно использовать IntegerVector, то как мне сказать шаблону, что я хочу ссылаться на результат в R как на целое число, а не как вектор длины 1?