我正在尝试使用Rcpp获得一些结果,这是代码。
#include <Rcpp.h>
#include <math.h>
using namespace Rcpp;
enter code here
// [[Rcpp::export]]
double compssr(NumericMatrix dist, NumericVector x, int n, int p) {
double ssr = 0; double del_sq = 0; double del_ij = 0;
int i, j, ip;
for (i = 0; i < n; i++) {
for (j = 0; j < i; j++) {
for (ip = 0; ip < p; ip++) {
del_sq = del_sq + (x(i, ip) - x(j, ip))*(x(i, ip) - x(j, ip));
if (i == j) del_sq = 0;
}
del_ij = sqrt(del_sq);
ssr = ssr + (dist(i, j) - del_ij)*(dist(i, j) - del_ij);
}}
return ssr;
}
NumericMatrix Scaling_X(NumericVector xbar, NumericMatrix x, double n, double p) {
NumericMatrix Sig_x(p, p);
int i, ii, ip, ip2;
for (ii = 0; ii < n; ii++) {
for (i = 0; i < p; i++) {
x(ii, i) = x(ii, i) - xbar(i);
}}
for (i = 0; i < n; i++) {
for (ip = 0; ip < p; ip++) {
for (ip2 = 0; ip2 < p; ip2++) {
Sig_x(ip, ip2) = Sig_x(ip, ip2) + x(i, ip)*x(i, ip2);
}}}
for (i = 0; i < Sig_x.ncol(); i++) {
for (ii = 0; ii < Sig_x.nrow(); ii++) {
Sig_x(i, ii) = Sig_x(i, ii) / n;
}}
return Sig_x;
}
实际上,还有更多功能,此代码的文件名为“ test.cpp”。 我通过使用
在R中调用了该文件sourceCpp("test.cpp")
没有错误,我可以在第一个函数中使用函数“ compssr”(返回类型:double) 但是我不能调用Scaling_X函数
我的代码中是否有任何错误? 我做了其他函数,可以使用返回类型为double的函数,但不能使用其他函数(NumericMatrix,NumericVector,List)
答案 0 :(得分:5)
您丢失了
// [[Rcpp::export]]
在函数Scaling_X
的前面,因此compileAttributes()
函数的作用是:编译两个函数,仅使其中一个可用。