2014-01-12 6 views
3

Я загрузил файл .tgz, который содержит R-скрипты в R/и один файл C в src /.Функция R признавать функцию C в том же пакете?

Функция R вызывает функцию C следующим образом:

Mainfn<-function(x) { 
    output <- matrix(nrow(x),ncol(x)); 
    output<-.C("myCfn",x=as.double(x),output=as.double(output), 
      PACKAGE='mypackage') 
    return(output) 
} 

В файле C, функция определена таким образом [...] обозначает длинную серию вычислений.

#include <R.h> 
#include <Rmath.h> 
#include <math.h> 
/*----------------------------------------------------------*/ 
void myCfn(double *x,double *output){ 
    [...] 
} 

Когда я установить пакет с R CMD INSTALL mypackage.tgz, Mainfun() выдает ошибку: "myCfn" not available for .C() for package "mypackage". Интересно, как я могу заставить мою функцию распознавать эту функцию, определенную в файле C?

+0

Вы построили код C? .C не загружается из исходного кода - он будет искать скомпилированный код C. – josliber

+0

Я также посмотрел бы пакет 'inline' и' Rcpp'. Это упрощает объединение R и C/C++. –

+0

@josiber Я думал, что команда R CMD INSTALL скомпилирует C из исходного кода. – hatmatrix

ответ

5

Мое лучшее предположение: пакет useDynLib(<pkg_name>) в своем NAMESPACE файлах.

Смежные вопросы