我有一个问题似乎应该很简单,但它似乎没有在OpenCPU API文档中解决。我已经设置并配置了我的OpenCPU服务器,我可以浏览http://localhost/ocpu/test/,我可以探索一切就好了。在浏览文档时,我可以看到运行包很容易,但有没有办法在我的服务器上运行一个简单的.R文件,而不必将其转换为包?我宁愿不必把它变成一个包来测试它。任何人都知道这是否可行,如果是,那么什么是正确的API?
答案 0 :(得分:3)
没有。来自OpenCPU FAQ #2: OpenCPU应用是一个 R包,其中包含一些使用OpenCPU API 调用包中R函数的网页(强调我的)。我强烈建议您学习制作包,即使只是为了随机功能。 Hadley的devtools
包(以及其他包)使建筑包更容易;如果你需要帮助,他的r-pkgs docs非常好。
答案 1 :(得分:0)
有一种方法可以运行单个R脚本。
不幸的是,它有一个限制,即您只能在R脚本中使用双引号或单引号。这是使用单引号的示例:
# Make test script. DO NOT USE DOUBLE-QUOTES inside the script.
echo "a = c('10', '20')" > myscript.r
# Encode it for transfer.
SCRIPT_ENCODED="$(urlencode "$(cat myscript.r)" | sed -r 's/%0A/\\n/g')"
# Save the script on the server.
RES1=$(curl -s "localhost:8004/ocpu/library/base/R/write" \
-H "multipart/form-data" \
-d "x=\"$SCRIPT_ENCODED\"" \
-d "file='script.r'")
# Execute the script on the server.
TMP_TOKEN1=$(echo $RES1 | sed -r 's/^.*tmp\/(\w+).*$/\1/')
RES2=$(curl -s "localhost:8004/ocpu/tmp/$TMP_TOKEN1/files/script.r" -X POST)
# View the results.
echo $RES2
TMP_TOKEN2=$(echo $RES2 | sed -r 's/^.*tmp\/(\w+).*$/\1/')
curl "localhost:8004/ocpu/tmp/$TMP_TOKEN2/R/a/print"