r语言中调用c 程序,如何在R程序包中调用C函数

程序包名称为pareto。这是.c文件中src目录:如何在R程序包中调用C函数

#include

#include

#include "Rinternals.h"

#include "R_ext/Rdynload.h"

static void dpareto(double *x, double *a, double *b, int *n, int *islog,

double *den){

int length = n[0];

int i;

int isLog = islog[0];

for (i = 0; i < length; i++){

if (a[i] > 0 && b[i] > 0) {

if (x[i] > a[i])

den[i] = log(b[i]) + b[i] * log(a[i]) - (b[i] + 1) * log(x[i]);

else

den[i] = R_NegInf;

if (!isLog)

den[i] = exp(den[i]);

}

else {

den[i] = R_NaN;

}

}

}

static R_CMethodDef DotCEntries[] = {

{"dpareto", (DL_FUNC) dpareto, 6},

{NULL}

};

void R_init_pareto(DllInfo *info)

{

R_registerRoutines(info, DotCEntries, NULL, NULL, NULL);

}

在R目录,相应.R文件是:

#' @useDynLib pareto

#' @export

dpareto

nx

na

nb

n

if (nx < n) x

if (na < n) a

if (nb < n) b

rt

as.integer(log), den = double(n), PACKAGE="pareto")

rt$den

}

记录了roxygen后,NAMESPACE有:

export(dpareto)

useDynLib(pareto)

但是这个软件包不能通过检查,并且保持基因不变速度错误消息:

"dpareto" not available for .C() for package "pareto"

Calls: dpareto -> .C

我真的不知道哪一步我犯了一个错误。

2017-03-07

Bs He

+0

'.c'函数是正确的,我成功地在一个包内调用。 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值