在 Rcpp 中调用向量的子集(不替换元素)

Call a subset of a vector in Rcpp (not replacing elements)

我想创建一个 returns 向量子集的函数。在 R 中,它是

x <- 1:3 
x[2:3] # return 2nd, 3rd elements

我的Rcpp代码如下,

// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace Rcpp;

// [[Rcpp::export]]
Rcpp::List subset(arma::vec x){
  return List::create(Named("sub_x") = x.elem(seq(1,2)));
}

但它给我一个错误

no matching function for call to 'arma::Col<double>::elem(Rcpp::Range)'

我看到很多帖子都在谈论使用 .elem 替换向量中的元素,但据我所知,很难找到适合我问题的内容。

一些评论:

  1. 你提供一个向量。你想要一个向量。你写了一个返回 List 的函数。嗯.

  2. 编译器告诉您它确实知道如何将 Rcpp::Range 粘贴到犰狳类型中。这是一个很好的提示。

  3. 犰狳记录了这个 under element access and submatrix view

所以只写

// [[Rcpp::export]]
arma::vec mysubset(arma::colvec x) {
  return x.rows(1,2);
}

你已经完成了,如下所示:

R> Rcpp::sourceCpp("~/tmp/so51138571.cpp")

R> x <- 1:3

R> mysubset(x)
     [,1]
[1,]    2
[2,]    3
R> 

这也可能与现有索引问题重复。