【发布时间】:2020-01-09 02:20:58
【问题描述】:
这就是我现在正在做的事情
library(Rcpp)
A <- diag(c(1.0, 2.0, 3.0))
rownames(A) <- c('X', 'Y', 'Z')
colnames(A) <- c('A', 'B', 'C')
cppFunction('
void scaleMatrix(NumericMatrix& A, double x) {
A = A * x;
}')
不幸的是它不起作用:(
> A
A B C
X 1 0 0
Y 0 2 0
Z 0 0 3
> scaleMatrix(A, 2)
> A
A B C
X 1 0 0
Y 0 2 0
Z 0 0 3
我从Rcpp FAQ, Question 5.1 那里了解到,Rcpp 应该能够更改我按值传递的对象。从Dirk's answer 中偷一个例子到我之前的问题:
> library(Rcpp)
> cppFunction("void inplaceMod(NumericVector x) { x = x * 2; }")
> x <- as.numeric(1:5)
> inplaceMod(x)
> x
[1] 2 4 6 8 10
我很困惑:可以就地修改NumericVector,但不能修改NumericMatrix?
【问题讨论】:
-
你能澄清一下吗?你真的要修改
A吗?您的代码当前确实复制了 A。 -
@Roland 是的,我确实想就地修改
A。该问题做出了错误的假设并已更新。很抱歉!
标签: c++ r matrix rcpp syntactic-sugar