是否可以使用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"
答案 0 :(得分:4)
有关更多示例,请参见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>
答案 1 :(得分:3)
首先,使用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"