使用C将属性分配给任意R对象?
作者:互联网
我已经开始使用Rcpp,我正在通过Hadley的book / page here工作.
我想这些基础知识对我来说已经绰绰有余了,尽管我错过了某些方面或者觉得这可能不那么基本了:
如何使用C将属性分配给任意R对象?
例如.:
// [[Rcpp::export]]
NumericVector attribs(CharacterVector x,NumericVector y) {
NumericVector out = y;
out.attr("my-attr") = x;
return out;
}
我知道我必须在C中指定类型,但我仍然想知道是否有一种方法可以为我传递的任何R对象分配一个属性…
我已经看到data.table中的settatr与C一起使用,但似乎只适用于类data.table的元素.有什么办法可以为每个R模式/类写一个额外的函数吗?
编辑:最终目的是加快为列表的每个元素分配属性.
我们之前有过discussion here – 但到目前为止它没有涉及Rcpp(除了通过其他包使用它.)
解决方法:
也许你想要这样的东西? RObject是所有R对象的泛型类.注意使用clone,这样就不会意外地修改传入的对象.
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
CharacterVector set_attr(CharacterVector x, RObject y) {
CharacterVector new_x = clone(x);
new_x.attr("my-attr") = y;
return new_x;
}
/*** R
x <- c("a", "b", "c")
set_attr(x, 1)
set_attr(x, "a")
attributes(x)
*/
标签:c,r,rcpp 来源: https://codeday.me/bug/20190831/1776065.html