RCPP导入列表/自R数据帧具有大量变量的

问题描述 投票:1回答:1

我是新来RCPP编程,我不能想出一个非常基本的东西。

我试图导入一个大单子来自R到C ++。我使用RCPP。我该列表包含约40行和50列。我在这里重现它的一个较小的版本,供大家参考。

df1 = data.frame(Variable1=c(1,2,3,4,5,6,7,8,9,10,1),Variable2=c(11,12,13,14,15,16,17,18,19,20,11),
             Variable3 = c(1,0,0,1,1,0,0,0,1,0,1),
             Variable4=c(1,1,1,1,2,2,2,2,2,2,2),
             Variable5=c(20,-2,-5,10,30,2,1,.5,50,-1,60))

这是一个数据框对象。我知道这个职位(how many vectors can be added in DataFrame::create( vec1, vec2 ... )?),您只能导入数据框对象RCPP有20列。当你从凯文Ushey的帖子在这里(how many vectors can be added in DataFrame::create( vec1, vec2 ... )?)希望你也能有尽可能多的列。我宁愿不使用数据框的路线,因为我需要写一个相当复杂的功能。

我的困惑来自于以下情况:当我使用

typeof(df1)

[R告诉我,这是一个列表对象。

什么是进口的RCPP这个数据的最佳方式?可能有人点我的源/告诉我一个副本的代码,我可能能够使用我的数据集(请注意我的数据集有50列)?

任何帮助/建议将不胜感激。

r rcpp
1个回答
2
投票

作为@RalfStubner和@duckmayr提到的,你可能已经被误读的建设中存在的限制。上有接受现有的数据帧的对象没有任何限制。

为了说明,这里是一个500列data.frame(其为简单起见,我们假设只包含数值向量),其中总结了第一行中的所有元素的不完全合理例子。

Code

#include <Rcpp.h>

// [[Rcpp::export]]
double extractFromBigDataFrame(Rcpp::DataFrame d, bool verbose=false) {
  int n = d.length();
  double sum = 0;
  for (int i=0; i<n; i++) {
    // we are making a simplifying assumption here that each column is numeric
    Rcpp::NumericVector x = d[i];
    double elem = x[0];
    sum += elem;
    if (verbose) print(x);
  }
  return sum;
}

/*** R
m <- matrix(1:1000, 2, 500)
d <- as.data.frame(m)
extractFromBigDataFrame(d)
rowSums(m)  # comparison
*/

Output

R> Rcpp::sourceCpp("/tmp/so54563983.cpp")

R> m <- matrix(1:1000, 2, 500)

R> d <- as.data.frame(m)

R> extractFromBigDataFrame(d)
[1] 250000

R> rowSums(m)  # comparison
[1] 250000 250500
R> 
© www.soinside.com 2019 - 2024. All rights reserved.