从c ++调用r脚本不能将Rcpp :: CharacterVector转换为const char *

时间:2018-06-05 08:45:05

标签: r rcpp

有没有办法从C ++调用r脚本?

我有一个rscript,例如:

myScript.R:

runif(100)

我想从C ++执行这个脚本并传递结果。

我试过了:

#include <Rcpp.h>
#include <iostream>
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector loadFile(CharacterVector inFile){
    NumericVector one = system(inFile);
    return one;
}

inFile : "C:/Program Files/R/R-3.4.2/bin/x64/Rscript C:/Rscripts/myScript.R"

但它给了我:

cannot convert Rcpp::CharacterVector (aka Rcpp::Vector<16>} to const char* for argument 1 to int system(const char*)

1 个答案:

答案 0 :(得分:1)

通常的惯例是使用Rcpp以便在R中编写昂贵的C ++代码。

如果您想从c ++中调用R脚本,然后使用结果,一种方法是使用popen函数。

要了解如何将rcpp字符转换为std :: string,请参阅Converting element of 'const Rcpp::CharacterVector&' to 'std::string'

示例:

std::string r_execute = "C:/Program Files/R/R-3.4.2/bin/x64/Rscript C:/Rscripts/myScript.R"

FILE *fp = popen(r_execute ,"r");

您应该能够从文件流中读取操作结果。