c
  • r
  • 2014-01-12 43 views 3 likes 
    3

    我下載了一個.tgz文件,其中包含R/R腳本和src /中的一個C文件。使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.tgzMainfun()給出了一個錯誤:"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

    我最好的猜想是:包的NAMESPACE文件中需要useDynLib(<pkg_name>)

    相關問題