Пользовательский пакет R в OpenCPU / пакет найден, но функции не видны

CI написал пакет R для OpenCPU и хочу использовать его на своем собственном облачном сервере. Я не могу получить доступ к каким-либо функциям, даже если сам пакет распознается и может быть обновлен, и я могу получить доступ к другим (не пользовательским, например, базовым или статистическим) пакетам через POST и GET.

Я установил пользовательский пакет вместе со всеми зависимостями /usr/local/lib/R/site-library и я могу использовать функции из R сессии локально на сервере.

> TestConnectivity
function (x = 100) 
{
    return(sum(rnorm(x)))
}
<environment: namespace:MyPkg>
> TestConnectivity()
[1] 4.174071

Функция экспортируется правильно (документация с использованием roxygen2):

> getNamespaceExports("MyPkg")
[1] "TestConnectivity"

но когда я получаю к нему доступ через OpenCPU (либо через браузер, либо через curl) в /ocpu/library/MyPkg/R/TestConnectivity, Я получил:

object 'TestConnectivity' not found

In call:
get(reqobject, paste("package", reqpackage, sep = ":"), inherits = FALSE)

/ocpu/library/MyPkg/R/ также пусто (обычно ожидается список экспортируемых функций), но сам пакет виден через браузер по адресу /ocpu/library/MyPkg/:

    Information on package 'MyPkg'

Description:

Package:       MyPkg
Description:   in development ...
Type:          Package
Version:       0.1.2
[...]

Index:

TestConnectivity        Test Connectivity of OpenCPU
MyPkg                   Provide R analysis of stored data.
MyPkg-package           Calculation package

Я добавил его имя в поле предварительной загрузки в /etc/opencpu/server.conf, но /ocpu/info показывает только как loaded via a namespace (and not attached): [n] MyPkg_0.1.2, Я не знаю, если это проблема.

Я также добавил права доступа ко всем файлам, необходимым для функциональности пакета, в /etc/apparmor.d/opencpu.d/customНапример, файлы конфигурации DSN для подключения к базе данных ODBC.

Сам пакет состоит не только из функций, но и из собранных R6 а также S3 определения классов (наследование внутри отдельных файлов) - ни одно из которых не используется в TestConnectivity()тем не менее. Функции также не всегда помещаются в файлы с тем же именем, что и функция, и иногда несколько объединяются в один файл. (TestConnectivity() находится в соответствующем TestConnectivity.R файл - если это имеет значение.)

Есть ли какие-то ограничения в отношении файловой структуры при использовании OpenCPU в отличие от локального использования пакета, что может вызвать эту проблему? Или файлы определения классов могут быть причиной проблемы? Любые предложения приветствуются.

1 ответ

Спасибо за ответ (и отличная работа над OpenCPU, кстати...)!

Я решил свою проблему, просто установив пакет в /home/myUser/R/3.1/libraryнапример, .libPaths()[1] (или же R-LIBS-USER[1]) вместо /usr/local/lib/R/site-library,

Я добился этого, постепенно создавая все более и более сложный тестовый пакет... и в тот момент, когда у меня была почти структура моего реального проекта, он все еще работал. Единственным отличием был путь установки.

В общем, это, вероятно, проблема с управлением правами на моей виртуальной машине, а не с OpenCPU или моим пакетом. Мне жаль, что я не могу предоставить больше информации - если я наткнусь на что-то, я добавлю это здесь.

РЕДАКТИРОВАТЬ - я забыл: Конечно, URL меняется с /ocpu/library/MyPkg/R/ в /ocpu/user/MyUsername/library/MyPkg/R/,

Другие вопросы по тегам