Пользовательский пакет 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 в отличие от локального использования пакета, что может вызвать эту проблему? Или могут быть причиной проблемы файлы определения класса? Любые предложения приветствуются.


person Wordsmyth    schedule 13.08.2014    source источник
comment
Кажется, ты все делаешь правильно. Никаких дополнительных ограничений на пакеты R в OpenCPU нет. Ваш код где-то общедоступен? Или простая версия пакета, которая показывает проблему? Вам будет легче помочь, если вы предоставите пример, который мы можем протестировать.   -  person Jeroen    schedule 13.08.2014


Ответы (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/.

person Wordsmyth    schedule 13.08.2014