[英]Applied R Function in Cpp with Rcpp
我的问题很简单:
我目前正在尝试通过使用Rcpp编写一些c ++代码来加速我的r代码。 但是现在我需要插入一些我自己用R语言编写的函数。 我该怎么办?
编辑1:示例代码。
我自己编写了三个函数,它们称为:
1.pre_process。 2.transfer_element。 3.prediction。
#include <Rcpp.h>
using namespace Rcpp;
NumericVector sel_p;
NumericVector pur_p;
int k = sel_p.length();
int bps = 20;
NumericVector pur_p_temp( pur_p.begin(), sel_p.end());
float profit = sum(sel_p) + sum(pur_p_temp);
NumericVector minute_data;
NumericMatrix dataset;
int main(){
while(TRUE){
//GET MINUTE DATA HERE.
if (minute_data == dataset.end()) {
std::cout << "repeating" << std::endl;
} else if(minute_data != dataset.end()) {
dataset.push_back(minute_data)
std::cout << "Working!No Worries." << std::endl;
if (dataset.nrow() > bps) {
//transfer_element here.
//pre_process here.
//prediction here.
}
}
}
}
}
在R代码中,我将使用“ dget”函数来调用存储的函数,我不知道在c ++或Rcpp中这样做。
所有这三个函数都是用纯R代码编写的,并将它们转移到C ++中会杀死我。 如果需要更多信息,请告诉我。
提前致谢,
彼得
C ++与R是不同的野兽。 加上将对象从R 转移到C ++的需要 ,事情可能会变得有些繁琐。
考虑:
NumericVector sel_p;
NumericVector pur_p;
int k = sel_p.length();
int bps = 20;
NumericVector pur_p_temp( pur_p.begin(), sel_p.end());
float profit = sum(sel_p) + sum(pur_p_temp);
NumericVector minute_data;
NumericMatrix dataset;
这些变量不能位于全局范围之外。但是,缺少适当的初始化是有问题的。 特别是,请考虑最初定义但未初始化的pur_p
变量。 然后,稍后对该变量进行操作以创建pur_p_temp
。
接下来,让我们简要地谈谈int main()
用法。 在这种特殊情况下, 不得以这种方式命名函数,因为这是R的特权。 因此,我们将您的函数称为void hey_ya()
。
此外,要在R中使用函数,您需要指定// [[Rcpp::export]]
鉴于以上所述,您应该像下面那样构造代码:
#include <Rcpp.h>
// [[Rcpp::export]]
void hey_ya(Rcpp::NumericVector sel_p, Rcpp::NumericVector pur_p,
Rcpp::NumericVector minute_data, Rcpp::NumericMatrix dataset){
int k = sel_p.length();
int bps = 20;
Rcpp::NumericVector pur_p_temp( pur_p.begin(), sel_p.end());
float profit = sum(sel_p) + sum(pur_p_temp);
while(TRUE){
// GET MINUTE DATA HERE.
if (minute_data == dataset.end()) {
Rcpp::Rcout << "repeating" << std::endl;
} else if(minute_data != dataset.end()) {
dataset.push_back(minute_data)
Rcpp::Rcout << "Working! No Worries." << std::endl;
if (dataset.nrow() > bps) {
//transfer_element here.
//pre_process here.
//prediction here.
}
}
}
}
不过,既然你主要是省掉了一个完整的例子......这里有一个如何一起工作玩具显示dget
在RCPP。
#include <Rcpp.h>
// [[Rcpp::export]]
Rcpp::NumericVector dget_example(std::string file) {
// Obtain environment containing function
Rcpp::Environment base("package:base");
// Make function callable from C++
Rcpp::Function dget_r = base["dget"];
// Call the function and receive its list output
Rcpp::NumericVector res = dget_r(Rcpp::Named("file") = file);
// Change the above data type depending on _X_ object.
return res;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.