From 2ce0cd799c6300831937153f6df90e174308d5af Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Tue, 22 Oct 2024 14:13:34 +0200 Subject: [PATCH] Translated part of `UpdateRPlee11_cpp()` (#11) --- src/UpdateRPlee11_cpp.cpp | 89 ++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/src/UpdateRPlee11_cpp.cpp b/src/UpdateRPlee11_cpp.cpp index e9b4d65..cc0ed0d 100644 --- a/src/UpdateRPlee11_cpp.cpp +++ b/src/UpdateRPlee11_cpp.cpp @@ -1,5 +1,5 @@ #include -#include "misc.h" +#include "updateRP_genomic_cpp.h" // [[Rcpp::depends(RcppArmadillo)]] // [[Rcpp::export]] Rcpp::List UpdateRPlee11_cpp( @@ -10,56 +10,57 @@ Rcpp::List UpdateRPlee11_cpp( const std::string method, const bool MRF_G ){ - // p <- sobj$p - // tau <- hyperpar$tau - // cb <- hyperpar$cb + uint p = Rcpp::as(sobj["p"]); + double tau = Rcpp::as(hyperpar["tau"]); + double cb = Rcpp::as(hyperpar["cb"]); - // if (method == "Pooled" && MRF_G) { - // x <- sobj$X - // J <- hyperpar$J - // ind.r <- hyperpar$ind.r - // ind.d <- hyperpar$ind.d - // ind.r_d <- hyperpar$ind.r_d - // be.prop.sd.scale <- hyperpar$be.prop.sd.scale - // be.ini <- ini$beta.ini - // ga.ini <- ini$gamma.ini - // h <- ini$h + arma::vec beta_ini; + arma::uvec acceptlee; - // # erg = UpdateRP.lee11.helper(n, p, x, J, ind.r, ind.d, ind.r_d, be.ini, ga.ini, h, tau, cb) - // erg <- updateRP_genomic_cpp( - // p, x, J, ind.r, ind.d, ind.r_d, - // be.ini, be.prop.sd.scale, ga.ini, h, tau, cb - // ) + if (method == "Pooled" && MRF_G) { + arma::mat x = Rcpp::as(sobj["X"]); + uint J = Rcpp::as(hyperpar["J"]); + arma::mat ind_r = Rcpp::as(hyperpar["ind.r"]); + arma::mat ind_d = Rcpp::as(hyperpar["ind.d"]); + arma::mat ind_r_d = Rcpp::as(hyperpar["ind.r_d"]); + double be_prop_sd_scale = Rcpp::as(hyperpar["be.prop.sd.scale"]); + arma::vec be_ini = Rcpp::as(ini["beta.ini"]); + arma::vec ga_ini = Rcpp::as(ini["gamma.ini"]); + arma::vec h = Rcpp::as(ini["h"]); - // beta.ini <- as.vector(erg$be.ini) - // acceptlee <- erg$acceptl - // } else { - // beta.ini <- acceptlee <- vector("list", S) - // for (g in 1:S) { # loop through subgroups + Rcpp::List erg = updateRP_genomic_cpp( + p, x, J, ind_r, ind_d, ind_r_d, be_ini, be_prop_sd_scale, ga_ini, h, tau, + cb + ); - // x <- sobj$X[[g]] - // J <- hyperpar$J[[g]] - // ind.r <- hyperpar$ind.r[[g]] - // ind.d <- hyperpar$ind.d[[g]] - // ind.r_d <- hyperpar$ind.r_d[[g]] - // be.ini <- ini$beta.ini[[g]] - // be.prop.sd.scale <- hyperpar$be.prop.sd.scale[[g]] - // ga.ini <- ini$gamma.ini[[g]] - // h <- ini$h[[g]] + beta_ini = Rcpp::as(erg["be.ini"]); + acceptlee = Rcpp::as(erg["acceptl"]); + } else { + beta_ini = arma::zeros(S); + acceptlee = arma::zeros(S); + for (uint g = 0; g < S; ++g) { // loop through subgroups + // x <- sobj$X[[g]] + // J <- hyperpar$J[[g]] + // ind.r <- hyperpar$ind.r[[g]] + // ind.d <- hyperpar$ind.d[[g]] + // ind.r_d <- hyperpar$ind.r_d[[g]] + // be.ini <- ini$beta.ini[[g]] + // be.prop.sd.scale <- hyperpar$be.prop.sd.scale[[g]] + // ga.ini <- ini$gamma.ini[[g]] + // h <- ini$h[[g]] - // # erg = UpdateRP.lee11.helper(n, p, x, J, ind.r, ind.d, ind.r_d, be.ini, ga.ini, h, tau, cb) - // erg <- updateRP_genomic_cpp( - // p, x, J, ind.r, ind.d, ind.r_d, - // be.ini, be.prop.sd.scale, ga.ini, h, tau, cb - // ) + // erg <- updateRP_genomic_cpp( + // p, x, J, ind.r, ind.d, ind.r_d, + // be.ini, be.prop.sd.scale, ga.ini, h, tau, cb + // ) - // beta.ini[[g]] <- as.vector(erg$be.ini) - // acceptlee[[g]] <- erg$acceptl - // } - // } + // beta.ini[[g]] <- as.vector(erg$be.ini) + // acceptlee[[g]] <- erg$acceptl + } + } Rcpp::List out = Rcpp::List::create( - Rcpp::Named("beta.ini") = NA_REAL, // TEMP - Rcpp::Named("acceptlee") = NA_REAL // TEMP + Rcpp::Named("beta.ini") = beta_ini, + Rcpp::Named("acceptlee") = acceptlee ); return out; }