如何在网页上设置基于R的服务

如何在网页上设置基于R的服务,r,web,R,Web,我希望在网页上提供以下服务: 每天运行一个R-script,它收集公开可用的数据并进行一些计算(我已经开发了这个脚本,它需要一些额外的lib!) 在网页上发布更新的图形和数字/文本输出 我不想一直运行我自己的计算机,所以应该采用一种云解决方案(我想是吧?!?) 您对如何实现上述想法有什么想法吗?使用和cat打印HTTP响应,就像您从任何站点打印HTTP响应一样。例如,设置响应的内容类型,然后cat一些HTML,或者打印PNG,等等: #!/path/to/Rscript cat("Cont

我希望在网页上提供以下服务:

  • 每天运行一个R-script,它收集公开可用的数据并进行一些计算(我已经开发了这个脚本,它需要一些额外的lib!)
  • 在网页上发布更新的图形和数字/文本输出
我不想一直运行我自己的计算机,所以应该采用一种云解决方案(我想是吧?!?)

您对如何实现上述想法有什么想法吗?

使用和
cat
打印HTTP响应,就像您从任何站点打印HTTP响应一样。例如,设置响应的内容类型,然后
cat
一些HTML,或者打印PNG,等等:

#!/path/to/Rscript

cat("Content-type: text/html\n\n")
cat("<html>")
cat("<body>")
cat("<p><em>Hello</em>, world!</p>")
v <- round(runif(10)*10, 0)  # sample ten random integers from {0..10}
cat("<p>", v, "</p>")
cat("</body>")
cat("</html>")
#/路径/to/Rscript
cat(“内容类型:text/html\n\n”)
猫(“”)
猫(“”)
猫(“你好,世界!

”) v您可以看一看-它像web页面一样为R脚本服务,支持图形和常规输出。它使用Rserve,这使得它比任何涉及启动R的解决方案(如
R
Rscript
)都要快得多。它可以通过CGI或PHP在任何Web服务器上运行

生成绘图的脚本如下所示:

run <- function(n=100, ...) {
   p <- WebPlot(800, 600)
   n <- as.integer(n)
   plot(rnorm(n), rnorm(n), col=2, pch=19)
   p
}

在Apache /PHP框上的代码> Run

使用RScript考虑一个非常简单的设置。如果您有Windows服务器,这种方法可能特别有用(因为R服务器的其他几个选项似乎需要Linux)

下面的示例假设Apache/PHP在Windows下运行

WebApp PHP前端:

$GLOBALS["pathRscript"] = '"c:\\Program Files\\R\\R-2.14.1\\bin\\Rscript.exe"';
$GLOBALS["webAppRInterface"] = "c:\\WebApp\\R\\WebAppR.R";

function WebAppR($rExpression) {

    $command = $GLOBALS["pathRscript"] . " " . $GLOBALS["webAppRInterface"] . " " . $rExpression;    
    system($command);
} 
WebAppR接口(WebAppR.R)

##将所有错误消息接收到错误日志文件

谢谢你,亚历克斯。您必须在自己的计算机上完成,对吗?在任何有运行的web服务器和安装R的地方。对于像这样的简单应用,这是另一种选择,并且比rApache更容易安装,因为它使用R的httpd服务器。FastRWeb文档似乎声明它在Windows下无法工作(如果您的Web服务器是基于Windows的,则建议使用额外的Unix服务器)。它可以工作(文档中说),但使用Windows作为R web服务器通常是无用的/自杀性的。常见问题解答中有一整节都是关于R和web界面的。对于托管,您可以使用Amazon的EC2微实例。@迭代器:我没有EC2的经验,但应该可以每天运行脚本并获取结果,对吗?使用它完成整个过程托管可能太贵了,还是不贵?@vonjd-Amazon提供了一系列实际上是免费的服务。我没有使用过它,但它可能适合你。@Dirk:…除了我懒得为Kurt提供文本来用FastRWeb更新FAQ;)
## Sink any error messages to an error log file
errorLog <- file("c:/WebApp/R/error.log", open="wt")
sink(errorLog, type="message")

## Do an R call from a string passed from PHP
## Quotes in the string must be sent from PHP using the backquote "`"
eval(parse(text=gsub("`", "'", paste(commandArgs(T), collapse=" "))))