일부 준비된 함수로 내 R 코드를 RcppArmadillo로 번역 중입니다. 이 기능 중 일부를 번역 대신 Rcpp 코드에서 직접 사용하고 싶습니다. 예를 들어, 나는 sigma2
함수를 호출 할 :아르마딜로 데이터 형식의 RcppArmadillo에서 R 함수를 호출
sigma2<- function(xi.vec,w.vec,log10lambda,n,q){
lambda <- 10^log10lambda
(1/(n-q))*sum((lambda*xi.vec*(w.vec^2))/(lambda*xi.vec+1))
}
전형적인 Rcpp 코드는 다음과 같습니다 : 물론
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
SEXP myS(){
Rcpp::Environment myEnv = Rcpp::Environment::global_env();
Rcpp::Function myS = myEnv["sigma2"];
arma::vec xvec = myEnv["xi.vec"];
arma::vec wvec = myEnv["w.vec"];
double l = myEnv["log10lambda"];
int n = myEnv["n"];
int q = myEnv["q"];
return myS(Rcpp::Named("xi.vec",xvec),
Rcpp::Named("w.vec",wvec),
Rcpp::Named("l",l),
Rcpp::Named("n",n),
Rcpp::Named("q",q));
}
가 작동합니다. 하지만 내 문제는 내 경우에는 sigma2
함수의 매개 변수를 RcppArmadillo에 다른 함수 (예 : func1
)의 출력으로 정의해야하며 해당 매개 변수에는 데이터 유형이 있습니다. 예를 들어 xi.vec
및 w.vec
은 vec
유형입니다. 이제 sigma2
을 호출하기 위해이 코드를 어떻게 수정할 수 있습니까? 내 환경을 변경해야합니까?
답변 해 주셔서 감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다. – Ham82
"상당한"속도 저하가 아닙니다. 측정 할 수 있도록 레이어를 추가하지만 너무 극적으로 들리게 만듭니다. –