有一种方法,以通过一个data.table使用对象来C++函数Rcpp和/或RcppArmadillo无需手动变换到data.table一个data.frame?在下面的示例中test_rcpp(X2),test_arma(X2)两者都失败了c++ exception (unknown reason).
R代码
X=data.frame(c(1:100),c(1:100))
X2=data.table(X)
test_rcpp(X)
test_rcpp(X2)
test_arma(X)
test_arma(X2)
Run Code Online (Sandbox Code Playgroud)
c ++函数
NumericMatrix test_rcpp(NumericMatrix X) {
return(X);
}
mat test_arma(mat X) {
return(X);
}
Run Code Online (Sandbox Code Playgroud)
Rom*_*ois 12
在其他答案的基础上,这里是一些示例代码:
#include <Rcpp.h>
using namespace Rcpp ;
// [[Rcpp::export]]
double do_stuff_with_a_data_table(DataFrame df){
CharacterVector x = df["x"] ;
NumericVector y = df["y"] ;
IntegerVector z = df["v"] ;
/* do whatever with x, y, v */
double res = sum(y) ;
return res ;
}
Run Code Online (Sandbox Code Playgroud)
所以,马太说,这种对待data.table的data.frame(又名一Rcpp::DataFrame中Rcpp).
require(data.table)
DT <- data.table(
x=rep(c("a","b","c"),each=3),
y=c(1,3,6),
v=1:9)
do_stuff_with_a_data_table( DT )
# [1] 30
Run Code Online (Sandbox Code Playgroud)
这完全忽略了内部的data.table.
Rcpp位于编码为 SEXP的本机R 类型之上。这包括例如data.frame或matrix。
data.table不是原生的,它是一个附加组件。所以想要这个的人(你?)必须编写一个转换器,或者为其他人提供资金来编写一个转换器。
| 归档时间: |
|
| 查看次数: |
3444 次 |
| 最近记录: |