gpt4 book ai didi

rcpp - 从 Rcpp 中的列表中提取 data.frame

转载 作者:行者123 更新时间:2023-12-05 03:34:56 29 4
gpt4 key购买 nike

这可能是一个非常简单的问题,但我不知道哪里出了问题。

我有一个传递给 Rcpp 函数的列表,该列表的第一个元素是一个 data.frame。

我如何获取该 data.frame?

bar = list(df = data.frame(A = 1:3,B=letters[1:3]),some_other_variable = 2)

foo(bar)

以及以下 C++ 代码:

#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::NumericVector bar(Rcpp::List test){
Rcpp::DataFrame df_test = test["df"];
Rcpp::NumericVector result = df_test["A"];
return result;
}

我在 DataFrame df_test = test["df"] 行中收到以下错误:

错误:从 'Rcpp::Vector<19>::NameProxy{aka 'Rcpp::internal::generic_name_proxy<19, Rcpp::PreserveStorage> 转换为 'Rcpp::DataFrame{aka 'Rcpp::DataFrame_ImplRcpp: :PreserveStorage 不明确

有人知道我错过了什么吗?谢谢。

最佳答案

ListDataFrame 对象的实例化和构建可能会同时出现一些问题。请参阅(旧的!!)RcppExamples 包以获取工作示例。

这是您的代码的修复版本,可以使用 data.frame 中的 vector 执行某些操作:

代码

#include <Rcpp.h>

// [[Rcpp::export]]
int bar(Rcpp::List test){
Rcpp::DataFrame df(test["df"]);
Rcpp::IntegerVector ivec = df["A"];
return Rcpp::sum(ivec);
}

/*** R
zz <- list(df = data.frame(A = 1:3,B=letters[1:3]),some_other_variable = 2)
bar(zz)
*/

演示

> Rcpp::sourceCpp("~/git/stackoverflow/70035630/answer.cpp")
> zz <- list(df = data.frame(A = 1:3,B=letters[1:3]),some_other_variable = 2)
> bar(zz)
[1] 6
>

编辑:为了完整起见,赋值操作可以与 SEXP 一起使用,如 SEXP df2 = test["df"];然后可以用来实例化 data.frame。模板编程困难,并非所有角落都完全平滑。

关于rcpp - 从 Rcpp 中的列表中提取 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70035630/

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