Как создать список с атрибутами с помощью Rcpp - PullRequest
0 голосов
/ 14 февраля 2019

Можно ли создать список с атрибутами с помощью Rcpp?И если да, то как?

Мне нужен такой список для пакета shinyTree, для которого требуется эта структура, а мой код R довольно медленный, так как мне нужно несколько вложенных циклов для прохождения всех уровней списка.

Это структура, которая мне нужна:

list(Name1 = structure("", type = "root", sticon = "fa-icon", stclass = "color"))
$Name1
[1] ""
attr(,"type")
[1] "root"
attr(,"sticon")
[1] "fa-icon"
attr(,"stclass")
[1] "color"

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

См. Rcpp Gallery для большего количества примеров, но вот быстрый:

Код

#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::List quickdemo() {
  Rcpp::CharacterVector v = Rcpp::CharacterVector::create("");
  v.attr("type") = "root";
  v.attr("sticon") = "fa-icon";
  v.attr("stclass") = "color";
  return Rcpp::List::create(Rcpp::Named("Name1") = v);
}

/*** R
quickdemo()
*/

Вывод

R> Rcpp::sourceCpp("~/git/stackoverflow/54693381/answer.cpp")

R> quickdemo()
$Name1
[1] ""
attr(,"type")
[1] "root"
attr(,"sticon")
[1] "fa-icon"
attr(,"stclass")
[1] "color"

R>
0 голосов
/ 14 февраля 2019

Сначала создайте список с помощью Rcpp::List::create().Добавьте одну именованную запись с Rcpp::Named("NameHere") = data.Затем добавьте дополнительную разметку с помощью my_list.attr("attribute-name") = attribute_val.

. Это задается следующим образом:

#include<Rcpp.h>

// [[Rcpp::export]]
Rcpp::List create_list_with_attr(Rcpp::CharacterVector x) {
    Rcpp::List val = Rcpp::List::create(
        Rcpp::Named("Name1") = x
    );

    val.attr("type") = "root";
    val.attr("sticon") = "fa-icon";
    val.attr("stclass") = "color";

    return val;
}

Оттуда мы можем проверить ее с помощью:

create_list_with_attr(" ")
# $Name1
# [1] " "
#
# attr(,"type")
# [1] "root"
# attr(,"sticon")
# [1] "fa-icon"
# attr(,"stclass")
# [1] "color"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...