繁体   English   中英

使用文件参数在OpenCPU中调用R函数

[英]Call a R function in OpenCPU with file arguments

我想让用户使用基于Web的界面使用自定义参数调用自定义R函数。 可以上传本地文件以供使用。

我尝试使用OpenCPU来实现这一点, 到目前为止效果还不错。 用户的代码打包到ocpu.Snippet ,并与参数args一起传递到

ocpu.call(
    'do.call',
    {
        'what': snippet,
        'args': args
    },
    session => /* processing of return value and console output */
);

到目前为止,我的所有参数类型都可以正常工作。

现在,我正在测试文件的上载,发现了以下内容:

  1. JavaScript包装器 (分叉以删除烦人的警报)仅在文件处于最高级别时(例如上例中的snippetargs )检测到文件。 这意味着由于我的args 包含一个文件对象( args = { file: File } ),因此在使用上述调用时未检测到它们。 但是,调用ocpu.call('read.csv', args, ...)ocpu.call('read.csv', args, ...) ,因为现在包装器检测到file: File
  2. OpenCPU 仅允许使用multipart/form-data上传文件 据我了解,我在原始调用中拥有的嵌套文件无法以这种格式表示。
  3. 不用使用do.call我可以编写一个自定义的R函数来使用,它允许以某种方式将使用的文件作为“一阶”参数提供,然后以某种方式将它们传递给所提供的函数。

所以我被困住了,因为我不知道如何编写这样的函数,我真的很想知道是否有更好的方法来调用自定义函数并远程控制其参数。 你有解决的办法吗?

经过一番摆弄之后,我发现该函数相对易于编写:

functionCall <- function(func, ...) {
  return(do.call(func, list(...)))
}

在OpenCPU中提供该功能后,可以使用

args = {
  func: snippet,
  x: firstArg,
  y: secondArg,
  // arbitrarily many args
}

opencpu.call(
  'functionCall',
  openCpuArgs,
  callback
);

我用一个调用read.csvsnippet对此进行了测试,它成功地打印了其内容,而不返回错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM