“安装”功能在C语法中意味着什么?

时间:2016-08-28 18:36:52

标签: c r function syntax

我正在尝试理解R包ucminf调用的C代码。以下代码来自https://cran.r-project.org/src/contrib/ucminf_1.1-4.tar.gz处的文件interface.c:

#include <R.h>
#include <Rinternals.h>  //R internal structures
#include <R_ext/RS.h>    //F77_CALL etc.

// Declare FORTRAN routine for use in C
extern void F77_NAME(ucminf)(int*, double[], double*, double[],
                 int*,double[],int*,int*,int*,double[],SEXP);

/*-------------------------------------------------------------------------------
  Define C functions that calls user defined function in R
*/

void installPar(int nn, double x[], SEXP rho) {
    int i;
    SEXP PAR = findVarInFrame(rho, install(".x"));
    double *xpt = REAL(PAR);
    if (LENGTH(PAR) != nn)
    error("Dimension mismatch, length(.x) = %d != n = $d", LENGTH(PAR), nn);
    for (i = 0; i < nn; i++) xpt[i] = x[i] ;
}

rho是在R中创建的环境,它包含向量.x。我最好的猜测是SEXP PAR = findVarInFrame(rho, install(".x"));行将PAR设置为.x,但install()命令的作用是什么?

这是一个如此简单的问题,我很惊讶我在网上找不到答案 - 搜索“安装c语法”发现了很多关于如何安装编译器的信息,但我找不到任何关于命令的信息。任何有关关键字的建议都会使我的搜索更有效。

1 个答案:

答案 0 :(得分:4)

此代码是我认为的R扩展的一部分,因此这里使用install是对Writing Extension的R C API的函数调用。这样做是在当前符号表中创建符号.x(或返回对现有.x符号的引用)。链接文档确实表明如果符号已经存在,使用install是无害的,并且如果这是您真正想要做的事情,那么查找符号是一种好方法。