library(inline)fx = cxxfunction(signature(x='List'),body = ' Rcpp::List xList(x); int n = xList.size(); double res[n]; for(int i=0; i<n; i++) { Rcpp NumericVector y(xList[i]); int m=y.size(); res[i]=0; for(int j=0; j<m; j++){ res[i]=res[i]+y[j] } } return(wrap(res));',plugin='Rcpp')x<-List(c(1,c(6))fx(x)解决方法@H_301_6@ 这里有几个小错误:
>两个语法错误:您需要R的Rcpp :: NumericVector,并且在最后一个循环中缺少一个分号.
>对C有一个误会:你需要像std :: vector< double> RES(n)的;因为n在编译时不知道.
>你在实例化你的向量从表中太激进/乐观,我在两个语句中做到这一点.
此版本的作品:
R> fx <- cxxfunction(signature(x='List'),plugin='Rcpp',body = ' + Rcpp::List xList(x); + int n = xList.size(); + std::vector<double> res(n); + + for(int i=0; i<n; i++) { + SEXP ll = xList[i]; + Rcpp::NumericVector y(ll); + int m=y.size(); + res[i]=0; + for(int j=0; j<m; j++){ + res[i]=res[i]+y[j]; + } + } + + return(Rcpp::wrap(res)); + ') R> x<-List(c(1,c(6)) R> fx(x)[1] 6 9 10 6 R>
编辑:这是一个更加惯用的一个版本:
fx <- cxxfunction(signature(x='List'),body = ' Rcpp::List xList(x); int n = xList.size(); Rcpp::NumericVector res(n); for(int i=0; i<n; i++) { SEXP ll = xList[i]; Rcpp::NumericVector y(ll); for(int j=0; j<y.size(); j++){ res[i] += y[j]; } } return(res);')总结
以上是内存溢出为你收集整理的c – 如何处理R到Rcpp中的列表全部内容,希望文章能够帮你解决c – 如何处理R到Rcpp中的列表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)