错误:无法使用R函数转换:as.data.frame

时间:2014-12-08 20:00:30

标签: r rcpp

我试图用C ++读取文本文件并将其作为DataFrame返回。我已经创建了一个用于读取文件并返回它的框架方法:

// [[Rcpp::export]]
DataFrame rcpp_hello_world(String fileName) {

    int vsize = get_number_records(fileName);
    CharacterVector field1 = CharacterVector(vsize+1);

    std::ifstream in(fileName);

    int i = 0;
    string tmp;
    while (!in.eof()) {
      getline(in, tmp, '\n');
      field1[i] = tmp;
      tmp.clear( ); 
      i++;
    }
    DataFrame df(field1);
    return df;
}

我在R中运行:

> df <- rcpp_hello_world( "my_haproxy_logfile" )

但是,R返回以下错误:

Error: could not convert using R function : as.data.frame

我做错了什么?

非常感谢。

1 个答案:

答案 0 :(得分:5)

DataFrame对象是&#34;特殊&#34;。我们的首选用法是通过return Rcpp::DateFrame::create ...,您将在许多已发布的示例中看到,包括此处的许多答案。

这是一个from a Rcpp Gallery post

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
DataFrame modifyDataFrame(DataFrame df) {

  // access the columns
  Rcpp::IntegerVector a = df["a"];
  Rcpp::CharacterVector b = df["b"];

  // make some changes
  a[2] = 42;
  b[1] = "foo";       

  // return a new data frame
  return DataFrame::create(_["a"]= a, _["b"]= b);
}

虽然专注于修改数据框架,但它会向您展示如何创建一个。 _["a"]快捷方式也可以写为Named("a"),我更喜欢。