2016-08-28 5 views
-1

Я пытаюсь понять код C, вызванный R-пакетом ucminf. Следующий код из файла interface.c найденного в https://cran.r-project.org/src/contrib/ucminf_1.1-4.tar.gz:Что означает функция «установить» в синтаксисе Си?

#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

C не имеет «команд», хотя он может передать их ОС, которые вы используете. –

+0

Попробуйте 'man install' ... –

+0

@WeatherVane OK - это« функция »правильного термина? Я отредактирую вопрос, чтобы использовать правильную терминологию. – beandip

ответ

4

Этот код является частью расширения R, о котором я думаю, поэтому использование install здесь - вызов функции API R C для Writing Extension. Это делает символ .x в текущей таблице символов (или возвращает ссылку на существующий символ .x). Связанный документ показывает, что использование install безвредно, если символ уже существует и является хорошим способом поиска символа, если это то, что вы на самом деле хотите сделать.

Смежные вопросы