我想让用户使用基于Web的界面使用自定义参数调用自定义R函数。应该可以上传本地文件以供使用。
我尝试使用OpenCPU来实现这一点,直到现在一切正常。用户的代码被打包到ocpu.Snippet
并与参数args
一起传递到
ocpu.call(
'do.call',
{
'what': snippet,
'args': args
},
session => /* processing of return value and console output */
);
这适用于我目前使用的所有参数类型。
现在我正在测试文件上传,我发现了以下内容:
snippet
和args
)。这意味着,由于我的args
包含文件对象(args = { file: File }
),因此在使用上述调用时未检测到它们。但是,调用ocpu.call('read.csv', args, ...)
有效,因为现在包装器会检测到file: File
。multipart/form-data
。据我所知,我原始调用中的嵌套文件无法用这种格式表示。do.call
,这允许某种方式提供使用过的文件作为"一阶"参数然后以某种方式将它们传递给提供的函数。所以我被困了,因为我不知道如何编写这样的函数,我真的很想知道是否有更好的方法来调用自定义函数并远程控制其参数。你知道如何解决这个问题吗?
答案 0 :(得分:0)
在摆弄了一下之后,我发现这个函数相对容易编写:
functionCall <- function(func, ...) {
return(do.call(func, list(...)))
}
在OpenCPU中使用该功能后,可以使用
调用它args = {
func: snippet,
x: firstArg,
y: secondArg,
// arbitrarily many args
}
opencpu.call(
'functionCall',
openCpuArgs,
callback
);
我使用调用snippet
的{{1}}对其进行了测试,并成功打印了内容而不是返回错误。