Я хочу c()
2 списков в Rcpp, но я изо всех сил пытаюсь получить ту же структуру, что и в R.
Вот несколько простых данных + пример:
rlist = list(a = "123")
listadd = list(typ = "fdb")
c(rlist, listadd)
, что дает мне это:
$a
[1] "123"
$typ
[1] "fdb"
С Rcpp я обнаружил, что push_back
только делает более или менее то, что я хочу, но структура немного другая.Я также пытался использовать emplace_back
на основе этой ссылки , но, похоже, он не реализован в Rcpp.
cppFunction('
List cLists(List x, List y) {
x.push_back(y);
return(x);
}')
, что дает мне:
cLists(rlist, listadd)
$a
[1] "123"
[[2]]
[[2]]$typ
[1] "fdb"
Исходя из этого вопроса Я знаю, что мог бы использовать Language("c",x,y).eval();
, чтобы использовать функцию R c()
и получить правильный результат, но это не совсем правильный путь.
Поэтому мне было интересно, как я могу правильно объединить списки в Rcpp?
РЕДАКТИРОВАТЬ: Основываясь на комментарии @ Dirk, я попытался создать новый список и заполнить их с помощьюдругие списки элементов, но затем я теряю имена элементов.
cppFunction('
List cLists(List x, List y) {
int nsize = x.size();
int msize = y.size();
List out(nsize + msize);
for(int i = 0; i < nsize; i++) {
out[i] = x[i];
}
for(int i = 0; i < msize; i++) {
out[nsize+i] = y[i];
}
return(out);
}')
Вывод:
cLists(rlist, listadd)
[[1]]
[1] "123"
[[2]]
[1] "fdb"