[英]How can I return a list of matrices from Rcpp to R?
我在Rcpp中有一個函數,它的功能是這樣的:它創建了一個std :: list類型的矩陣列表,並打算將該矩陣列表返回給R。
我在這里附上一個簡化的示例:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
Rcpp::List splitImagesRcpp(arma::mat x)
{
std::list<arma::mat> listOfRelevantImages;
int relevantSampleSize = x.n_rows;
for(int k = 0; k < relevantSampleSize; ++k)
{
listOfRelevantImages.push_back(x.row(k));
}
return wrap(listOfRelevantImages);
}
這里的問題是, 我想向R返回一個矩陣列表,但是我得到一個vector列表 。 我已經嘗試了很多,並查看了文檔,但是似乎找不到解決方案。 看起來wrap可以完成工作,但是它也將我的矩陣遞歸地包裝在列表中。
我得到這樣的東西:
> str(testingMatrix)
List of 200
$ : num [1:400] 1 1 1 1 1 1 1 1 1 1 ...
$ : num [1:400] 1 1 1 1 1 1 1 1 1 1 ...
但我想得到這樣的東西:
> str(testingMatrix)
List of 200
$ : num [1:40, 1:10] 1 1 1 1 1 1 1 1 1 1 ...
$ : num [1:40, 1:10] 1 1 1 1 1 1 1 1 1 1 ...
我想從Rcpp而不是R中執行此操作。這是因為我希望能夠將功能與純R編程的功能互換,以便測量加速。
任何幫助將非常感激!
使用arma::field
具有必要的管道轉換類來和來回 R和C ++。
這是一些關於如何使用字段類的示例代碼,因為上面的示例是不可復制的...
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::field<arma::mat> splitImagesRcpp(arma::mat x) {
// Sample size
int relevantSampleSize = x.n_rows;
// Create a field class with a pre-set amount of elements
arma::field<arma::mat> listOfRelevantImages(relevantSampleSize);
for(int k = 0; k < relevantSampleSize; ++k)
{
listOfRelevantImages(k) = x.row(k);
}
return listOfRelevantImages;
}
例:
set.seed(1572)
(x = matrix(runif(25), 5, 5))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0.2984725 0.679958392 0.5636401 0.9681282 0.25082559
# [2,] 0.3657812 0.157172256 0.6101798 0.5743112 0.62983179
# [3,] 0.6079879 0.419813382 0.5165553 0.3922179 0.64542093
# [4,] 0.4080833 0.888144280 0.5891880 0.6170115 0.13076836
# [5,] 0.8992992 0.002045309 0.3876262 0.9850514 0.03276458
(y = splitImagesRcpp(x))
# [,1]
# [1,] Numeric,5
# [2,] Numeric,5
# [3,] Numeric,5
# [4,] Numeric,5
# [5,] Numeric,5
y[[1]]
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0.2984725 0.6799584 0.5636401 0.9681282 0.2508256
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.