【问题标题】:How to chain two function calls in opencpu如何在opencpu中链接两个函数调用
【发布时间】:2013-09-04 06:07:40
【问题描述】:

据说OpenCPU支持链接函数调用来计算,例如f(g(x), h(y))

关于参数格式的文档:https://public.opencpu.org/api.html#api-arguments 包含一个通过计算来说明这一点的示例

summary(read.csv("mydata.csv"))

在此示例中,f 是通用函数摘要,它以对象为参数。

我需要计算如下:

mycalc(read.csv("mydata.csv")) 

myplot(read.csv("my data.csv"))

其中 f 将数据框作为参数。当将 read.csv 函数返回的 sessionid 或哈希键作为对象参数给出时,这似乎不起作用。如何解决两个非泛型函数的链接问题?

这是一个完整的例子:

准备包来测试 f(g(x)) 这里 plotcars(dfcars()) in R

  dfcars<-function(){
   data(cars);
   cars
  }

 plotcars<-function(df){
  matplot(1:nrow(df),df)
 }

 plotcars(dfcars()) # test the two chained functions are working


 package.skeleton(list = c("dfcars", "plotcars"), name = "mypkg")

从 ubuntu 终端安装新包

 sudo R CMD INSTALL mypkg

按照 opencpu 文档执行函数链接命令

 curl http://localhost/ocpu/library/mypkg/R/dfcars -d ""

 /ocpu/tmp/x07a1f83f/R/.val
 /ocpu/tmp/x07a1f83f/stdout
 /ocpu/tmp/x07a1f83f/source
 /ocpu/tmp/x07a1f83f/console
 /ocpu/tmp/x07a1f83f/info

'#replace session id with returned one above

  curl http://localhost/ocpu/tmp/x07a1f83f/R/.val/print

   speed dist
 1      4    2
 2      4   10
 3      7    4

'# POST chaining with the generic function summary works
 curl http://localhost/ocpu/library/base/R/summary -d 'object=x07a1f83f'
 /ocpu/tmp/x0e29fd5c/R/.val
 /ocpu/tmp/x0e29fd5c/stdout
 /ocpu/tmp/x0e29fd5c/source
 /ocpu/tmp/x0e29fd5c/console
 /ocpu/tmp/x0e29fd5c/info

# and the summary gets printed
 curl http://localhost/ocpu/tmp/x0e29fd5c/R/.val/print
  speed           dist       
 Min.   : 4.0   Min.   :  2.00  
 1st Qu.:12.0   1st Qu.: 26.00  
 Median :15.0   Median : 36.00  
 Mean   :15.4   Mean   : 42.98  
 3rd Qu.:19.0   3rd Qu.: 56.00  
 Max.   :25.0   Max.   :120.00  

# POST chaining with the nongeneric function plotcars doesn't work
curl http://localhost/ocpu/library/mypkg/R/plotcars -d 'object=x07a1f83f'
unused argument (object = object)

In call:
plotcars(object = object)

【问题讨论】:

  • 它应该可以工作。你能发布一个mycalc 函数的例子吗?你是通过github访问的吗?
  • 我刚刚按照 Jeroen 的要求添加了一个示例。从我在 MacAir 的 virtualbox 中的 ubuntu 12.04 上安装 opencpu 1.0 的示例中可以看出,我没有通过 github 访问
  • 不要忘记通过单击答案旁边的复选框将问题标记为已回答。

标签: r opencpu


【解决方案1】:

从示例中,您似乎传递了名为 object 的参数,而您的函数有一个名为 df 的参数?对函数执行 POST 会将 http 请求的参数映射到函数参数。所以你目前正在做的是plotcars(object=dfcars()),这会导致你看到的错误。试试:

curl http://localhost/ocpu/library/mypkg/R/plotcars -d 'df=x07a1f83f'

【讨论】:

  • 谢谢 Jeroen,你是对的。这有效并证明你的opencpu很棒。我在 opencpu 文档中的例子太过字面了,并认为 object 参数是第二个函数的某种通用参数......
  • 嗯,我会尝试在文档中添加一个示例,这样就不那么容易混淆了。
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 2012-05-03
  • 2019-12-13
  • 1970-01-01
相关资源
最近更新 更多