其他分享
首页 > 其他分享> > 使用C将属性分配给任意R对象?

使用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