dirkschumacher / armacmp

🚀 Automatically compile linear algebra R code to C++ with Armadillo

Home Page:https://dirkschumacher.github.io/armacmp/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[feature request] return multiple values

dselivanov opened this issue · comments

For example if I perform matrix decomposition, I need to return at least 2 matrices. For the moment it is not possible. How hard is it to allow return of a list of matrices?

I think it should not be very hard as we could utilize all the Rcpp helper functions.

Ok, so unnamed lists seems to work without problems it seems :)

library(armacmp)
fun_r <- function(X) {
  q <- qr(X)
  return(
    list(qr.Q(q), qr.R(q))
  )
}
fun <- compile(fun_r)
fun(matrix(1:100, 10, 10))
#> [[1]]
#>              [,1]          [,2]         [,3]         [,4]         [,5]
#>  [1,] -0.05096472 -5.855400e-01  0.653099092  0.433948559 -0.186423552
#>  [2,] -0.10192944 -4.879500e-01 -0.440414610 -0.122900794 -0.009898589
#>  [3,] -0.15289416 -3.903600e-01 -0.276158748  0.005759371  0.106497739
#>  [4,] -0.20385888 -2.927700e-01 -0.002328121 -0.294008755  0.140881172
#>  [5,] -0.25482360 -1.951800e-01 -0.124125777 -0.209087875 -0.227682319
#>  [6,] -0.30578831 -9.759001e-02 -0.048109291 -0.019530055  0.148446835
#>  [7,] -0.35675303 -8.326673e-17 -0.169906948  0.175383951 -0.138777935
#>  [8,] -0.40771775  9.759001e-02  0.499551964 -0.575069057  0.287268568
#>  [9,] -0.45868247  1.951800e-01 -0.083812024  0.548952112  0.552650404
#> [10,] -0.50964719  2.927700e-01 -0.007795538  0.056552544 -0.672962323
#>              [,6]         [,7]        [,8]        [,9]        [,10]
#>  [1,]  0.06218550  0.007254665 -0.02859962 -0.01394567 -0.003138731
#>  [2,]  0.70872664  0.039539530 -0.16307932  0.07579172 -0.078431277
#>  [3,] -0.57405102 -0.170475387 -0.14928213  0.50175185 -0.322439649
#>  [4,] -0.07096822  0.006218805  0.85618076 -0.16457304 -0.035046531
#>  [5,] -0.29506441 -0.013034190 -0.33647062 -0.75774934 -0.106658669
#>  [6,] -0.16749024  0.748345769 -0.11158626  0.12738619  0.505454452
#>  [7,] -0.01827208 -0.583852354  0.03694890  0.04754313  0.670072418
#>  [8,]  0.15064990 -0.197225463 -0.26233844  0.17016441 -0.045737848
#>  [9,]  0.11348328 -0.007797481  0.01244984 -0.20940379 -0.284210498
#> [10,]  0.09080065  0.171026106  0.14577689  0.22303452 -0.299863667
#> 
#> [[2]]
#>            [,1]      [,2]          [,3]          [,4]          [,5]
#>  [1,] -19.62142 -47.65201 -7.568261e+01 -1.037132e+02 -1.317438e+02
#>  [2,]   0.00000 -14.63850 -2.927700e+01 -4.391550e+01 -5.855400e+01
#>  [3,]   0.00000   0.00000  1.346989e-14  3.871130e-14 -3.162497e-15
#>  [4,]   0.00000   0.00000  0.000000e+00  2.018713e-14 -9.967033e-15
#>  [5,]   0.00000   0.00000  0.000000e+00  0.000000e+00  1.893802e-14
#>  [6,]   0.00000   0.00000  0.000000e+00  0.000000e+00  0.000000e+00
#>  [7,]   0.00000   0.00000  0.000000e+00  0.000000e+00  0.000000e+00
#>  [8,]   0.00000   0.00000  0.000000e+00  0.000000e+00  0.000000e+00
#>  [9,]   0.00000   0.00000  0.000000e+00  0.000000e+00  0.000000e+00
#> [10,]   0.00000   0.00000  0.000000e+00  0.000000e+00  0.000000e+00
#>                [,6]          [,7]          [,8]          [,9]
#>  [1,] -1.597744e+02 -1.878050e+02 -2.158356e+02 -2.438662e+02
#>  [2,] -7.319251e+01 -8.783101e+01 -1.024695e+02 -1.171080e+02
#>  [3,] -3.279626e-15  4.919439e-14  3.068793e-14 -6.324993e-15
#>  [4,] -9.048799e-15  1.982839e-14  4.301233e-15 -1.993407e-14
#>  [5,]  1.545493e-14 -2.155914e-15  3.889355e-15  3.787604e-14
#>  [6,] -5.459568e-15 -3.186027e-16 -5.739597e-15 -1.422317e-30
#>  [7,]  0.000000e+00  4.142901e-15 -8.647270e-16  3.161158e-31
#>  [8,]  0.000000e+00  0.000000e+00  2.149148e-15 -3.759367e-30
#>  [9,]  0.000000e+00  0.000000e+00  0.000000e+00 -8.306597e-30
#> [10,]  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
#>               [,10]
#>  [1,] -2.718968e+02
#>  [2,] -1.317465e+02
#>  [3,]  1.592961e-14
#>  [4,]  2.707895e-15
#>  [5,]  6.292983e-15
#>  [6,] -6.357470e-15
#>  [7,]  8.982766e-15
#>  [8,] -3.629195e-15
#>  [9,]  2.499858e-15
#> [10,]  4.040369e-15

Created on 2019-12-26 by the reprex package (v0.3.0)