从 Rcpp 函数打印整数向量
Print integer vector from Rcpp function
如何从 Rcpp 函数打印整数向量?在我的函数中,我想打印 IntegerVector
a
。在 R 中,我使用 compnz_next(5,3,c(1,2,2))
调用此函数
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
IntegerVector compnz_next(int n, int k, IntegerVector a) {
bool more = true;
int i;
static int h = 0;
static int t = 0;
for ( i = 0; i < k; i++ ) {
a[i] = a[i] - 1;
}
if ( 1 < t ) {
h = 0;
}
h = h + 1;
t = a[h-1];
a[h-1] = 0;
a[0] = t - 1;
a[h] = a[h] + 1;
more = ( a[k-1] != ( n - k ) );
Rcout << "a vector is:" << more << std::endl;
for ( i = 0; i < k; i++ ) {
a[i] = a[i] + 1;
}
return a;
}
尝试以下行:
Rf_PrintValue(a);
为了完整性,稍后,我们现在还有两个选择:
R> library(Rcpp)
R> cppFunction('void printVector(IntegerVector v) { print(v); } ')
R> printVector(c(1L, 3L, 5L))
[1] 1 3 5
这只是将 R 中的 Rf_PrintValue()
函数包装成更易于键入的 print()
函数。
R> cppFunction('void printVector2(IntegerVector v) {
+ Rcpp::Rcout << v << std::endl; } ')
R> printVector2(c(1L, 3L, 5L))
1 3 5
R>
(较新的)函数是通过适当的 operator()<<
实现的,因此我们可以像其他 C++ 类型一样使用 <<
。它也适用于数值向量和矩阵。
如何从 Rcpp 函数打印整数向量?在我的函数中,我想打印 IntegerVector
a
。在 R 中,我使用 compnz_next(5,3,c(1,2,2))
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
IntegerVector compnz_next(int n, int k, IntegerVector a) {
bool more = true;
int i;
static int h = 0;
static int t = 0;
for ( i = 0; i < k; i++ ) {
a[i] = a[i] - 1;
}
if ( 1 < t ) {
h = 0;
}
h = h + 1;
t = a[h-1];
a[h-1] = 0;
a[0] = t - 1;
a[h] = a[h] + 1;
more = ( a[k-1] != ( n - k ) );
Rcout << "a vector is:" << more << std::endl;
for ( i = 0; i < k; i++ ) {
a[i] = a[i] + 1;
}
return a;
}
尝试以下行:
Rf_PrintValue(a);
为了完整性,稍后,我们现在还有两个选择:
R> library(Rcpp)
R> cppFunction('void printVector(IntegerVector v) { print(v); } ')
R> printVector(c(1L, 3L, 5L))
[1] 1 3 5
这只是将 R 中的 Rf_PrintValue()
函数包装成更易于键入的 print()
函数。
R> cppFunction('void printVector2(IntegerVector v) {
+ Rcpp::Rcout << v << std::endl; } ')
R> printVector2(c(1L, 3L, 5L))
1 3 5
R>
(较新的)函数是通过适当的 operator()<<
实现的,因此我们可以像其他 C++ 类型一样使用 <<
。它也适用于数值向量和矩阵。