Если вам нужен пробел после каждого элемента, который вы отправляете на Rcpp::Rcout
, вы должны указать это.Вам нужно изменить
Rcout << d[i];
на
Rcout << d[i] << " ";
Кроме того, как я сейчас заметил благодаря комментарию hrbrmstr , вам также нужны кавычки вокруг каждого элементакогда они напечатаны.Опять же, если вам нужны кавычки, вы должны указать это Rcout
, это не произойдет автоматически.Затем вы дополнительно измените вышеупомянутую строку на
Rcout << "\"" << d[i] << "\" ";
Я бы также добавил новую строку до завершения функции.Итак, давайте сравним;У меня есть мой C ++ код в файле so-answer.cpp
:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
CharacterVector test(NumericMatrix h, NumericMatrix nt, StringVector d, int r){
CharacterVector m(h.ncol());
Function f("paste0");
for(int i = 0; i < d.size(); i++){
Rcout << d[i];
}
return m;
}
// [[Rcpp::export]]
CharacterVector test2(NumericMatrix h, NumericMatrix nt, StringVector d, int r){
CharacterVector m(h.ncol());
Function f("paste0");
for(int i = 0; i < d.size(); i++){
Rcout << "\"" << d[i] << "\" ";
}
Rcout << "\n";
return m;
}
/*** R
h <- matrix(0,nrow=2, ncol =2)
colnames(h) <- c("A", "B")
nt <- matrix(0,nrow=2, ncol =2)
d <- c("2019-03", "2014-04")
test(h, nt, d, 1)
test2(h, nt, d, 1)
*/
Затем, когда я использую Rcpp::sourceCpp()
для компиляции и предоставления R:
Rcpp::sourceCpp("so-answer.cpp")
#>
#> > h <- matrix(0,nrow=2, ncol =2)
#>
#> > colnames(h) <- c("A", "B")
#>
#> > nt <- matrix(0,nrow=2, ncol =2)
#>
#> > d <- c("2019-03", "2014-04")
#>
#> > test(h, nt, d, 1)
#> 2019-032014-04[1] "" ""
#>
#> > test2(h, nt, d, 1)
#> "2019-03" "2014-04"
#> [1] "" ""
Создано в 2018 году-11-23 с помощью пакета prex (v0.2.1)
Также отмечу, что я уверен, что весь этот лишний код существует, но япросто оставил это.