Получить объект из списка Rcpp - PullRequest
       12

Получить объект из списка Rcpp

0 голосов
/ 05 сентября 2018

Я новичок в Rcpp и борюсь с этим. У меня есть функция, которая возвращает список с 2 объектами: max и argmax из вектора. Я хотел бы получить только максимум или только argmax из этого списка в другой функции. Как я могу это сделать? Ниже приведен пример:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
List max_argmax_cpp(NumericVector x){
  double max = x[0];
  int argmax = 0 + 1;
  for(int i = 1; i < x.length(); i++){
    if(x[i]>x[i-1]){
      max = x[i];
      argmax = i+1;
    }
  }
  List Output;
  Output["Max"] = max;  
  Output["Argmax"] = argmax;
  return(Output);
}

// [[Rcpp::export]]
int max_only(NumericVector x){
  int max = **only max from max_argmax_cpp(x)**;
  return(max);
}   

1 Ответ

0 голосов
/ 05 сентября 2018

Во втором примере вы можете просто вызвать исходную функцию и присвоить ей List, элементы которого можно получить по имени (или позиции):

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
List max_argmax_cpp(NumericVector x){
  double max = x[0];
  int argmax = 0 + 1;
  for(int i = 1; i < x.length(); i++){
    if(x[i]>x[i-1]){
      max = x[i];
      argmax = i+1;
    }
  }
  List Output;
  Output["Max"] = max;  
  Output["Argmax"] = argmax;
  return(Output);
}

// [[Rcpp::export]]
double max_only(NumericVector x){
  List l = max_argmax_cpp(x);
  double max = l["Max"];
  return(max);
} 
/*** R
set.seed(42)
x <- runif(100)
max_argmax_cpp(x)
max_only(x)
*/

Выход:

> set.seed(42)

> x <- runif(100)

> max_argmax_cpp(x)
$Max
[1] 0.7439746

$Argmax
[1] 99


> max_only(x)
[1] 0.7439746
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...