Использование функций с несколькими аргументами с lapply в Rcpp

Я пытаюсь использовать функцию Rcpp Lapply с функциями с несколькими аргументами.

В R то же самое можно сделать с помощью следующего кода.

lapply(y,FUN=function(x)corr(x[,2:ncol(x)],x[,1]))

где corr — это функция, которая принимает два аргумента.

Кто-нибудь может привести пример кода в Rcpp для вышеуказанной ситуации?

0

Решение

Если я правильно понимаю, что вы хотите, основываясь на ваших последних комментариях, то вам нужно mapply скорее, чем sapplyнапример, :

> mapply( function(a, b) a == b, 1:9, 9:1 )
# [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE

RCPP имеет mapply (для двух или трех аргументов)

#include <Rcpp.h>
using namespace Rcpp ;

struct Compare : public std::binary_function<int,int,bool> {
bool operator() (int a, int b) const {
return (a==b);
}
};

// [[Rcpp::export]]
LogicalVector test( NumericVector x, NumericVector y){
return mapply( x, y, Compare() ) ;
}

который я хотел бы написать так с лямбдами C ++ 11.

// [[Rcpp::export]]
LogicalVector test( NumericVector x, NumericVector y){
return mapply( x, y, [](double a, double b){
return a == b ;
} ) ;
}

Или даже используя std::equal_to<double> учебный класс:

// [[Rcpp::export]]
LogicalVector test( NumericVector x, NumericVector y){
return mapply( x, y, std::equal_to<double>() ) ;
}

Однако для таких тривиальных функций вы должны использовать сахар:

// [[Rcpp::export]]
LogicalVector test( NumericVector x, NumericVector y){
return x == y ;
}
3

Другие решения


По вопросам рекламы [email protected]