gpt4 book ai didi

r - 如何保护 R 中的矩阵不被 Rcpp 更改?

转载 作者:行者123 更新时间:2023-12-02 17:40:35 41 4
gpt4 key购买 nike

我正在制作一个包含两个 Rcpp 函数的包。第一个函数用于创建一个矩阵,第二个函数将多次使用该矩阵。在调用两个函数之间,矩阵存储在 R 的全局环境中。

M <- myFirstRcpp(X)
P <- mySecondRcpp(M)

根据输入参数,第二个函数将在计算向量之前更改输入矩阵(由第一个函数创建)(aFunctionmySecondRcpp()< 中的 C++/):

IntegerVector aFunction( SEXP Qin, SEXP param ) {
NumericMatrix Q(Qin);
// Some changes made to Q
...
// return a vector generated from Q
}

我的问题是,在第二个 Rcpp 函数中对 Q 矩阵所做的更改也会影响驻留在 R 的全局环境中的矩阵 (M) 的副本。

如何在没有太多开销的情况下防止 Rcpp 改变 R 的全局环境?

注意:M 矩阵的大小约为 2000x65000。在 32 位和 64 位 R 的 Windows 和 Linux 上,R 3.0.2 和 Rcpp 0.10.6 会出现此问题。

最佳答案

这是一个已知且有记录的功能。我们正在通过接口(interface)从 R 调用

  SEXP somefunction(SEXP a, SEXP b, ...)

因此传递了一个指针,并且对Q 的更改会影响外部对象。 这是一件好事,因为它使调用速度非常快——没有副本。

如果您想要不同的实例,请使用 clone() 方法,如

  NumericMatrix Q = clone(Qin);

关于r - 如何保护 R 中的矩阵不被 Rcpp 更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21281911/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com