如何包含nmath.h?

时间:2015-03-16 17:39:10

标签: r

我想在我的nmath.h代码(C包中)中添加标题R,以查找R_FINITEML_ERR_return_NAN。我发现不能直接包含nmath.h。要找到R_FINITE,我可以加入R_ext/libextern.h。但我不知道要包含什么以便找到ML_ERR_return_NAN。有任何想法吗?我发现Brian Ripley教授提到的here提到了写R扩展,但我找不到nmath.h在那里(究竟在哪里?)

1 个答案:

答案 0 :(得分:2)

在Debian或Ubuntu上:

 sudo apt-get install r-mathlib

之后你可以构建如下的测试程序:

// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; 
//          compile-command: "gcc -s -Wall -O3 \
//               -I/usr/share/R/include -o rmath_rnorm \
//               rmath_rnorm.c -lRmath -lm" -*-

// Compare to 
//    $ Rscript -e "RNGkind('Marsaglia'); \
//                 .Random.seed[2:3] <- c(123L, 456L); rnorm(2)"
//    [1] -0.2934974 -0.3343770

#include <stdio.h>

#define MATHLIB_STANDALONE 1
#include <Rmath.h>

int main(void) {

    set_seed(123, 456);
    printf("rnorm: %f %f\n", rnorm(0.0, 1.0), rnorm(0.0, 1.0));

    return 0;
}

注意:前四行应该是您安全的文件中的一行,然后M-x compile为您构建程序。 Rscript调用同上:一行。

编辑: Drats。回答错误的问题:) nmath.h似乎无法从src/nmath/nmath.h 导出,但此R Mathlibrary是R Core导出的 用于其他。 nmath.h文件的位置

/* Private header file for use during compilation of Mathlib */
#ifndef MATHLIB_PRIVATE_H
#define MATHLIB_PRIVATE_H

所以你不应该依赖它。