c++ - 使用 C++ 将属性分配给任意 R 对象?

标签 c++ r rcpp

我已经开始使用 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++ - 使用 C++ 将属性分配给任意 R 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19069269/

相关文章:

c++ - 将依赖项链接到静态库?

r - 如何获取包含两个其他值之间的值的数据框行?

c++ - getrusage() 获取系统时间、用户时间。 Unix编程帮助

c++ - 用于分配成员函数指针的 lambda 表达式

c++ - 更改函数中的全局变量

将研究级荟萃分析 reshape /转换为个体患者数据荟萃分析

r - R 中从右到左的运算符结合性可能吗?

c++ - 复制包含 Eigen::CholmodDecomposition 的自定义类对象时出现“使用已删除函数”错误

r - 这在 Rcpp 中是否正确?

r - Shiny 的服务器发生错误加载命名空间没有包rcpp但安装了rcpp并在R作品中加载 Shiny