gpt4 book ai didi

c++ - 如何将 std::vector> 转换为 Rcpp::Dataframe 或 Rcpp::NumericMatrix

转载 作者:行者123 更新时间:2023-11-30 00:50:46 24 4
gpt4 key购买 nike

我有一个 std::vector<std::vector<double>>我想将其转换为 Rcpp::DataFrameRcpp::NumericMatrix .

我目前的解决方案看起来像这样,但远非理想;它产生一个数字列表。

RcppExport SEXP Foo(...)
{
std::vector<std::vector<double>> result;

/// ... Do some work.

return Rcpp::wrap(result);
}

注意事项:列数和行数不会固定。在每次运行之间,这些都可以改变。我提到这一点是因为到目前为止我发现的很多解决方案都涉及在编译时了解列。

如果可能,我希望解决方案完全包含在 c++ 中;即 R 用户应该能够调用该函数,而不必手动将结果处理到数据框或矩阵中。

最佳答案

转换 std::vector<std::vector<double>>到列表是我们一般可以提供的最好的。 DataFrame要求所有列具有相同的长度。

您必须自己手动处理。像这样制作矩阵:

std::vector<std::vector<double>> result ;
int nc = result.size(), nr = result[0].size() ;
NumericMatrix m( nr, nc ) ;
for( int j=0; j<nc; j++){
std::vector<double>& result_j ;
if( result_j.size() != nr ) stop( "incompatible size" ) ;
for( int i=0; i<nr; i++){
m(i,j) = result_j[i] ;
}
}

制作DataFrame直接有点难,我建议先制作一个列表,然后将此列表转换为 DataFrame :

List list( nc ) ;
for( int j=0; j<nc; j++) list[j] = wrap( result[j].begin(), result[j].end() ) ;
DataFrame df = list ;

不过,在将列表设为数据框之前,您可能需要设置列表的名称。

关于c++ - 如何将 std::vector<std::vector<double>> 转换为 Rcpp::Dataframe 或 Rcpp::NumericMatrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com