[feature request] return multiple values
dselivanov opened this issue · comments
Dmitry Selivanov commented
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?
Dirk Schumacher commented
I think it should not be very hard as we could utilize all the Rcpp helper functions.
Dirk Schumacher commented
Ok, so unnamed lists seems to work without problems it seems :)
Dirk Schumacher commented
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)