在 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
替换向量中的元素,但据我所知,很难找到适合我问题的内容。
一些评论:
你提供一个向量。你想要一个向量。你写了一个返回 List
的函数。嗯.
编译器告诉您它确实知道如何将 Rcpp::Range
粘贴到犰狳类型中。这是一个很好的提示。
犰狳记录了这个 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>
这也可能与现有索引问题重复。
我想创建一个 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
替换向量中的元素,但据我所知,很难找到适合我问题的内容。
一些评论:
你提供一个向量。你想要一个向量。你写了一个返回
List
的函数。嗯.编译器告诉您它确实知道如何将
Rcpp::Range
粘贴到犰狳类型中。这是一个很好的提示。犰狳记录了这个 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>
这也可能与现有索引问题重复。