1
#include <RcppArmadillo.h>
2
using namespace Rcpp;
3

4
// [[Rcpp::export]]
5 1
arma::mat dependRspn(std::vector<std::vector<int> > A,arma::mat Z,
6
                     arma::mat Zdiv, arma::mat W, int n) {
7 1
  arma::mat betmat(n,n);
8 1
  betmat.fill(0);
9
  
10 1
  arma::colvec e(n);
11 1
  e.fill(1);
12 1
  for(int i=0;i<n; ++i){
13
    
14 1
    arma::colvec z_ci = Z.col(i);
15 1
    arma::rowvec z_ri = Z.row(i);
16 1
    for(std::vector<int>::size_type jiter = 0; jiter!=A[i].size(); ++jiter){
17 1
      int j = A[i][jiter];
18
      
19 1
      arma::colvec z_cj = Z.col(j);
20 1
      arma::rowvec z_rj = Z.row(j);
21
      
22 1
      arma::mat s1_ij = (z_ci*z_rj) % Zdiv;
23 1
      arma::mat s1_ji = (z_cj*z_ri) % Zdiv;
24
      
25 1
      arma::colvec s2_vec_ij = (z_ci % z_rj.t()) % Zdiv.diag();
26 1
      arma::mat s2_ij = e*s2_vec_ij.t();
27
      
28 1
      arma::colvec s2_vec_ji = (z_cj % z_ri.t()) % Zdiv.diag();
29 1
      arma::mat s2_ji = e * s2_vec_ji.t();
30
      
31 1
      arma::mat N_ij = arma::as_scalar(W(i,j)) * (s1_ij - s2_ij);
32 1
      arma::mat N_ji = arma::as_scalar(W(j,i)) * (s1_ji - s2_ji);
33
      
34 1
      arma::mat N = abs(N_ij - N_ji);
35 1
      arma::colvec e_i = e;
36 1
      e_i[i] = 0;
37 1
      arma::colvec e_j = e;
38 1
      e_j[j] = 0;
39
      
40 1
      betmat.row(i) += (N * e_i).t();
41 1
      betmat.row(j) += (N * e_j).t();
42
    }
43
  }
44 1
  betmat= betmat - arma::diagmat(betmat.diag());
45 1
  return betmat;
46
}

Read our documentation on viewing source code .

Loading