我想制作一个返回向量子集的函数。在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
替换向量中的元素,但是据我所知,很难找到适合我的问题的东西。
答案 0 :(得分:2)
一些评论:
您提供了一个向量。你想要一个向量。您编写了一个返回List
的函数。嗯。
编译器告诉您它确实知道如何将Rcpp::Range
插入Armadillo类型。这是一个很好的提示。
Armadillo已将此文档记录在under element access和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>
这很可能也是现有索引问题的副本。