Fortran代码并发现没有调用:'R_registerRoutines','R_useDynamicSymbols'

Had*_*eed 3 r package cran

当我将我的包提交给cran时,我得到错误,因为找不到调用:'R_registerRoutines','R_useDynamicSymbols'注册本机例程并禁用符号搜索是一个好习惯.我的包在CRAN的这个版本的R中进行了测试:

R版本3.4.0 alpha(2017-03-28 r72427)

注意这里有一个解决这个错误的问题 R CMD检查说明:发现没有调用:'R_registerRoutines','R_useDynamicSymbols' 但是我的外部代码在Fortran中并尝试了那里描述的过程,但没有为我解决问题.我该怎么做才能克服这个问题?谢谢

更新: 按照https://www.r-bloggers.com/1-easy-package-registration/描述的程序,我可以通过

Error:Found no calls to: ‘R_useDynamicSymbols’
Run Code Online (Sandbox Code Playgroud)

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

Had*_*eed 5

我解决了这个问题,你可能会发现它对你自己的情况有用.假设你在src目录中有一个名为myf.f90的子程序,其中包含以下内容:

    SUBROUTINE cf(r,cd,loci)
    INTEGER::r,cd
    DOUBLE PRECISION::loci
....
....
....
    END SUBROUTINE cf
Run Code Online (Sandbox Code Playgroud)

要注册这个,您需要执行以下操作:

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);
}
Run Code Online (Sandbox Code Playgroud)

C)将完整输出复制并粘贴到packagename_init.c文件中以放入src /

D)更新NAMESPACE,验证useDynLib(packagename,.registration = TRUE)