简体   繁体   English

Rcpp:如何将 R function 和 Rcpp function 组合在一起制作 ZEFE6407A8E604A7A

[英]Rcpp: how to combine the R function and Rcpp function together to make a package

Suppose I have the following c++ code in a file named test.cpp假设我在名为 test.cpp 的文件中有以下 c++ 代码

#include <Rcpp.h>

//[[Rcpp::export]]
Rcpp::NumericMatrix MyAbar (const Rcpp::NumericMatrix & x, int T){
    unsigned int outrows = x.nrow(), i = 0, j = 0;
    double d;
    Rcpp::NumericMatrix out(outrows,outrows);
    // Rcpp::LogicalVector comp;

    for (i = 0; i < outrows - 1; i++){
        Rcpp::NumericVector v1 = x.row(i);
        Rcpp::NumericVector ans(outrows);
        for (j = i + 1; j < outrows ; j ++){
            d = mean(Rcpp::runif( T ) < x(i,j));
            out(j,i)=d;
            out(i,j)=d;
        }
    }
    return out;
}

I know with the following command, I can have my own package我知道通过以下命令,我可以拥有自己的 package

Rcpp.package.skeleton("test",cpp_files = "~/Desktop/test.cpp")

However, what if I want to combine the following R function which call the Rcpp-function into the package但是,如果我想将以下调用 Rcpp 函数的 R function 组合到 package

random = function(A, T){
    if (!is.matrix(A)){
        A = Reduce("+",A)/T
    } 
    # global constant and threshold
    n = nrow(A)
    B_0 = 3
    w = min(sqrt(n),sqrt(T * log(n)))
    q = B_0 * log(n) / (sqrt(n) * w)

    A2 = MyAbar(A) 
    diag(A2) <- NA 
    K = A2 <= rowQuantiles(A2, probs=q, na.rm =TRUE)
    diag(K) = FALSE 
    P = K %*% A * ( 1/(rowSums(K) + 1e-10))

    return( (P + t(P))*0.5 )
}

How can i make it?我怎样才能做到?

Suppose I have the following c++ code in a file named test.cpp假设我在名为test.cpp的文件中包含以下c ++代码

#include <Rcpp.h>

//[[Rcpp::export]]
Rcpp::NumericMatrix MyAbar (const Rcpp::NumericMatrix & x, int T){
    unsigned int outrows = x.nrow(), i = 0, j = 0;
    double d;
    Rcpp::NumericMatrix out(outrows,outrows);
    // Rcpp::LogicalVector comp;

    for (i = 0; i < outrows - 1; i++){
        Rcpp::NumericVector v1 = x.row(i);
        Rcpp::NumericVector ans(outrows);
        for (j = i + 1; j < outrows ; j ++){
            d = mean(Rcpp::runif( T ) < x(i,j));
            out(j,i)=d;
            out(i,j)=d;
        }
    }
    return out;
}

I know with the following command, I can have my own package我知道,使用以下命令,我可以拥有自己的包裹

Rcpp.package.skeleton("test",cpp_files = "~/Desktop/test.cpp")

However, what if I want to combine the following R function which call the Rcpp-function into the package但是,如果我想将以下调用Rcpp函数的R函数组合到包中,该怎么办

random = function(A, T){
    if (!is.matrix(A)){
        A = Reduce("+",A)/T
    } 
    # global constant and threshold
    n = nrow(A)
    B_0 = 3
    w = min(sqrt(n),sqrt(T * log(n)))
    q = B_0 * log(n) / (sqrt(n) * w)

    A2 = MyAbar(A) 
    diag(A2) <- NA 
    K = A2 <= rowQuantiles(A2, probs=q, na.rm =TRUE)
    diag(K) = FALSE 
    P = K %*% A * ( 1/(rowSums(K) + 1e-10))

    return( (P + t(P))*0.5 )
}

How can i make it?我该怎么做?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM