找到OpenCPU / Package上的自定义R包,但没有可见的功能

时间:2014-08-13 09:30:15

标签: r package cloud opencpu

CI为OpenCPU编写了一个R包,并希望在我自己的云服务器上使用它。即使包本身被识别并且可以更新,我也无法访问任何功能,我可以通过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(通过浏览器或通过卷曲)在/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的软件包功能所需的所有文件添加了访问权限,例如ODBC数据库连接的DSN配置文件。

包本身不仅包含函数,还包含汇编的R6S3类定义(单个文件中的继承) - 尽管如此,它们都不在TestConnectivity()中使用。这些函数也不总是放在与函数名称完全相同的文件中 - 有时几个函数组合在一个文件中。 (TestConnectivity()放在相应的TestConnectivity.R文件中 - 如果重要的话。)

与使用本地软件包相比,使用OpenCPU时是否存在关于文件结构的限制,这可能会导致此问题?或者类定义文件可能是问题的原因?任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

感谢答案(以及关于OpenCPU的伟大工作,顺便说一下......)!

我只需在/home/myUser/R/3.1/library中安装软件包就解决了我的问题,例如.libPaths()[1](或R-LIBS-USER[1])代替/usr/local/lib/R/site-library

我通过逐步构建一个越来越复杂的测试包来到达那里......在我几乎拥有实际项目结构的地方,它仍然有效。唯一不同的是安装路径。

总而言之,我的虚拟机上的权限管理可能是一个问题,而不是OpenCPU或我的软件包。对不起,我无法提供更多信息 - 如果我偶然发现了什么,我会在这里添加。

编辑 - 我忘记了:当然,网址从/ocpu/library/MyPkg/R/更改为/ocpu/user/MyUsername/library/MyPkg/R/