从 Rcpp 中的列表中提取 data.frame
Extract a data.frame from a list within Rcpp
这可能是一个非常简单的问题,但我不知道哪里出了问题。
我有一个传递给 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{又名 'Rcpp::DataFrame_ImplRcpp::PreserveStorage 模棱两可
有人知道我错过了什么吗?谢谢
List
和 DataFrame
对象的实例化和构造可能会同时出现一些问题。请参阅(旧 !!)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/Whosebug/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 函数的列表,该列表的第一个元素是 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{又名 'Rcpp::DataFrame_ImplRcpp::PreserveStorage 模棱两可
有人知道我错过了什么吗?谢谢
List
和 DataFrame
对象的实例化和构造可能会同时出现一些问题。请参阅(旧 !!)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/Whosebug/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
.模板编程难度大,并非所有角落都完全磨平