Входной аргумент формулы Rcpp - PullRequest
0 голосов
/ 11 июля 2019

Я хочу создать функцию Rcpp с входным значением R формула .Когда я использую String в качестве входных данных для функции, я получаю ошибку в R, когда пишу формулу в нестроковом формате (если я предоставляю формулу как строку в R, тогда все работает правильно).Пожалуйста, приведите пример того, как использовать формула объект класса в качестве входных данных для функции Rcpp.

Будет очень полезно для помощи!

1 Ответ

1 голос
/ 11 июля 2019

После Ральф Стубнер ответ Я приведу короткий пример.Функция foo принимает формулу и фрейм данных в качестве входного аргумента и возвращает фрейм данных, который содержит переменные, упомянутые в формуле.

Код RCPP :

#include <RcppArmadillo.h>
using namespace RcppArmadillo;

//' Extract dataframe from dataframe df according to the formula
//' @export 
// [[Rcpp::export]]
DataFrame foo(DataFrame df, Formula formula)
{
    Rcpp::Environment stats_env("package:stats");
    Rcpp::Function model_frame = stats_env["model.frame"];
    DataFrame df_new = model_frame(Rcpp::_["formula"] = formula, Rcpp::_["data"] = df);
    return(df_new);
}

Код R :

my_df <- data.frame("x1" = c(1,2,3), 
                    "x2" = c(4,5,6), 
                    "x3" = c(7,8,9))

my_df_new = foo(df = my_df, formula = x1~x2+I(x3^2)+I(x2*x3))

Выход будет:

 x1 x2 I(x3^2) I(x2 * x3)
  1  4      49         28
  2  5      64         40
  3  6      81         54
...