私はRcpp
C++ 自体は言うまでもなく、C++ とその機能の初心者なので、これは専門家にとっては些細なことのように思えるかもしれません。ただし、愚かな質問などというものはないので、とにかく:
インデックスを使用して、C++ で NumericVector の複数の要素を一度にアドレス指定する方法があるかどうか疑問に思っていました。全体をより明確にするために、私がやろうとしていることと同等のRを次に示します。
# Initial vector
x <- 1:10
# Extract the 2nd, 5th and 8th element of the vector
x[c(2, 5, 8)]
[1] 2 5 8
これは、R を使用して実行している C++ 関数でこれまでに取得したものですsourceCpp
。それは機能しますが、私にはかなり不便に思えます。私の目標を達成するためのより簡単な方法はありますか?
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector subsetNumVec(NumericVector x, IntegerVector index) {
// Length of the index vector
int n = index.size();
// Initialize output vector
NumericVector out(n);
// Subtract 1 from index as C++ starts to count at 0
index = index - 1;
// Loop through index vector and extract values of x at the given positions
for (int i = 0; i < n; i++) {
out[i] = x[index[i]];
}
// Return output
return out;
}
/*** R
subsetNumVec(1:10, c(2, 5, 8))
*/
> subsetNumVec(1:10, c(2, 5, 8))
[1] 2 5 8