Функция C не выполняется в R после установки пакета - PullRequest
0 голосов
/ 02 июня 2019

Я собрал свой собственный пакет R, содержащий функцию c, созданную с помощью inline::cfunction(). В рамках моих проектов R я устанавливаю пакет через install.packages() и require() it. Когда я в конце концов вызываю свою функцию C, скомпилированный код не найден.

Когда я непосредственно запускаю определение функции в своих проектах, функция является исполняемой.

В моем пакете "myPkg":

Определение моей функции:

test = inline::cfunction(sig = c(x="integer"),
                          body = 'return(x);')

Сборка пакета через:

R CMD INSTALL --no-multiarch --with-keep.source myBayes

В рамках моего проекта:

установка с локального компьютера:

install.packages(pkgs = "/path/to/myPkg",
                 type = "source",
                 repos = NULL)

вызов функции

test(2)

Проблемы

Вызов test(2) Результат:

Error in .Primitive(".Call")(<pointer: 0x0>, x) : 
NULL value passed as symbol address

вызов test результат:

An object of class "CFunc"
function (x) 
.Primitive(".Call")(<pointer: 0x0>, x)
<bytecode: 0x107c0bd18>
<environment: 0x107c0fb20>
Slot "code":
[1] "#include <R.h>\n#include <Rdefines.h>\n#include <R_ext/Error.h>\n\n\nextern \"C\" {\n  SEXP filee3e4c1e3f3 ( SEXP x );\n}\n\nSEXP filee3e4c1e3f3 ( SEXP x ) {\nreturn(x);\n  warning(\"your C program does not return anything!\");\n  return R_NilValue;\n}\n"

вызов test после запуска определения функции непосредственно в моем сеансе R приводит к:

An object of class "CFunc"
function (x) 
.Primitive(".Call")(<pointer: 0x101c03fa0>, x)
<environment: 0x109070418>
Slot "code":
[1] "#include <R.h>\n#include <Rdefines.h>\n#include <R_ext/Error.h>\n\n\nextern \"C\" {\n  SEXP filee7277d5c2fa6 ( SEXP x );\n}\n\nSEXP filee7277d5c2fa6 ( SEXP x ) {\nreturn(x);\n  warning(\"your C program does not return anything!\");\n  return R_NilValue;\n}\n"

тогда test(2) работает, потому что он становится частью .GlobalEnv

...