获取 R 数据帧的内存地址

use*_*505 1 c c++ r rcpp

我希望我的 C 函数能够操作存储在 R 数据框中的一些值。

为了实现这一点,需要 R 数据帧存储其数据的(真实)内存地址(希望以连续的方式);然后从 R 调用 C 函数并将此内存地址作为参数传递。

问题:我们如何获得R数据帧的内存地址?

dww*_*dww 6

Rcpp 通过引用传递。即它传递指向 R 对象的指针,而不是它们的值。因此,您可以在 C++ 中以与任何指针相同的方式操作它们。

例子

library(Rcpp)

cppFunction('
void f1(DataFrame x) {
  IntegerVector V1 = x["V1"];
  V1 = V1 * 2;
  }
')

x = data.frame(V1 = 1:5, V2 = 1:5)
f1(x)
x
#   V1 V2
# 1  2  1
# 2  4  2
# 3  6  3
# 4  8  4
# 5 10  5
Run Code Online (Sandbox Code Playgroud)

  • 示例中给出了 C/C++ 代码(即,它作为文本字符串传递给“cppFunction”)。`cppFunction` 只是定义与 R 代码内联的 C++ 函数的简写方式。您还可以以正常方式将 C++ 函数编写在单独的文件中,然后使用“sourceCpp”将它们编译/链接到 R。基本上,`RCpp` 包已经为您完成了使用指针集成 R 和 C 的艰苦工作 - 无需重新发明轮子。请参阅 http://adv-r.had.co.nz/Rcpp.html 进行快速介绍,有关更详细的版本,请参阅 http://dirk.eddelbuettel.com/code/rcpp.html (6认同)
  • 请考虑至少阅读 [Rcpp 简介](https://cloud.r-project.org/web/packages/Rcpp/vignettes/Rcpp-introduction.pdf) 小插图的几页。 (6认同)