我使用RcppArmadillo
进行编码并遇到了一个非常基本的问题。假设我有一个向量" v",我想采用它的前10个元素,就像在R:v[1:10]
中一样。由于1:10
在RcppArmadillo
中无效,我尝试了v.elem(seq_len(10))
,但它没有效果。任何提示?
答案 0 :(得分:2)
假设您正在使用arma::vec
,这应该可行:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::vec f(const arma::vec & v, int first, int last) {
arma::vec out = v.subvec(first, last);
return out;
}
/*** R
f(11:20, 3, 6)
*/
请注意,这使用从零开始的索引(11
是向量的第0个元素)。根据需要强制NumericVector
。
当源代码进入R时,代码被编译,链接,加载并执行嵌入式示例:
R> sourceCpp("/tmp/armaEx.cpp")
R> f(11:20, 3, 6)
[,1]
[1,] 14
[2,] 15
[3,] 16
[4,] 17
R>
所以这一切都是_只需要调用subvec()
。有关更多信息,请参阅Armadillo文档。