我的问题很简单:
我目前正试图通过使用Rcpp编写一些c ++代码来加速我的r代码。但是现在我需要自己插入一些我在R中编写的函数。我怎么能这样做?
Edit1:示例代码。
我自己写了三个函数,它们被称为:
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代码中,我将使用&#34; dget&#34;函数调用存储函数,我不知道在c ++或Rcpp中这样做。
所有这三个函数都是用纯R代码编写的,并将它们转换成C ++就会杀了我。如果需要更多信息,请告诉我。
提前致谢,
彼得
答案 0 :(得分:0)
C ++ 是与 R 不同的野兽。需要将 R 中的对象传输添加到 C ++ 中,事情会变得有点毛茸茸。
考虑:
$rcrds = \Searchy::search(...);
全局范围之外没有这些变量可以放在其中的范围。但是,缺乏正确的初始化是有问题的。特别是,考虑最初定义但未初始化的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
使用情况。在这种特殊情况下,函数必须不以这种方式命名,因为它是 R 的特权。所以,让我们调用您的函数int main()
。
此外,要在 R 中使用您的功能,您需要指定void hey_ya()
如上所述,您应该像这样构建代码:
// [[Rcpp::export]]
然而,因为你特别遗漏了一个完整的例子......这是一个玩具展示如何在Rcpp中使用#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