2017-03-29 17 views
2

當我提出我的包,CRAN我得到沒有發現調用錯誤的 :「R_registerRoutines」,「R_useDynamicSymbols」 這是註冊好的做法原生例程並禁用符號 搜索。 我的包在這個R版本的CRAN測試:Fortran代碼,並沒有發現呼叫:「R_registerRoutines」,「R_useDynamicSymbols」

[R版本3.4.0阿爾法(2017年3月28日r72427)

請注意,沒有爲這個錯誤在這裏 R CMD check note: Found no calls to: ‘R_registerRoutines’, ‘R_useDynamicSymbols’ 但我的解決方案外部代碼位於Fortran中,並嘗試了那裏描述的過程,但並未解決問題。我能做些什麼來克服這個問題? 感謝

更新: 繼程序描述https://www.r-bloggers.com/1-easy-package-registration/我可以通過

Error:Found no calls to: ‘R_useDynamicSymbols’ 

Found no call to: 'R_registerRoutines'仍然存在。

回答

4

我解決了這個問題,你會發現你自己的情況下非常有用。 讓我們假設你有一個叫myf.f90在src目錄子程序有以下內容:

SUBROUTINE cf(r,cd,loci) 
    INTEGER::r,cd 
    DOUBLE PRECISION::loci 
.... 
.... 
.... 
    END SUBROUTINE cf 

要註冊這個你需要做以下操作:運行

A)工具:: package_native_routine_registration_skeleton(「包目錄「)

B)編輯輸出;對於上面的例子將是:

#include <R.h> 
#include <Rinternals.h> 
#include <stdlib.h> // for NULL 
#include <R_ext/Rdynload.h> 

/* FIXME: 
Check these declarations against the C/Fortran source code. 
*/ 

/* .Fortran calls */ 
extern void F77_NAME(cf)(int *r, int *cd, double *loci); 

static const R_FortranMethodDef FortranEntries[] = { 
    {"cf", (DL_FUNC) &F77_NAME(cf), 3}, 
    {NULL, NULL, 0} 
}; 

void R_init_packagename(DllInfo *dll) 
{ 
    R_registerRoutines(dll, NULL, NULL, FortranEntries, NULL); 
    R_useDynamicSymbols(dll, FALSE); 
} 

C)複製並粘貼到一個packagename_init.c文件的完整輸出被投入在SRC/

d)更新NAMESPACE,驗證useDynLib(包名。註冊= TRUE)

+0

伊蘇,這正是在二月電子郵件由Brian裏普利和例如,在我的[博客文章(http://dirk.eddelbuettel.com/blog/code/r4/)上週。還是應該指出'_xbreed'部分反映了你的軟件包的名稱並且需要更新。 –

+0

我做的完全一樣,仍然是得到錯誤,最後我報告說,它爲假陽性,以克蘭,他們一致認爲這的確是個假陽性。感謝您的意見。 –