用Rcpp中的零替换矩阵的第k行

时间:2016-04-30 13:03:32

标签: c++ r rcpp

我想问一下使用临时变量来替换第SELECT dte "Date", location, receipts, SUM(receipts) OVER(ORDER BY dte ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) "Running total" FROM store WHERE dte < '10-Jan-2006' ORDER BY dte, location 行矩阵。

我希望将一行k替换为零。

因此,我创建了一个名为X的{​​{1}}副本,并且在每次迭代中,X的值都由Ynew1更新(第一个值)。但是,在我的代码中,Ynew1的行不仅被0替换,还被X替换。不幸的是,结果是Ynew1矩阵全为零(我预计最后一行的结果为零值)。这是代码:

X

1 个答案:

答案 0 :(得分:2)

好。我认为您要完成的目标如下:

  

k的{​​{1}}行替换为零

您使用的for循环结构并不理想。在每次x或行迭代中,您将i重新复制到x,然后继续将行清零。

在这种情况下,你应该像Ynew那样定位第一行:

k

注意:该函数处理R矩阵输入。 (例如,假设索引从1开始,而不是C ++的0。)

示例:

cppFunction('
// @param x A \code{matrix} with dimensions n x m. 
// @param k An \code{unsigned int} whose index begins at 1.
// @return A \code{matrix} with row \code{k} equal to zero.
Rcpp::NumericMatrix cobo(Rcpp::NumericMatrix x, unsigned int k){
  unsigned int n = x.nrow();

  // Bounds check
  if(k - 1 >= n){ stop("OOB Error"); }

  // Replace row by a vector of zeros.
  x(k - 1, Rcpp::_) = Rcpp::NumericVector(x.ncol());

  return x;
}
')