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

时间:2012-02-07 09:52:11

标签: r web

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

  • 每天运行一个R脚本,收集公开可用的数据并进行一些计算(我已经开发了脚本,它需要一些额外的库!)
  • 在网页上发布更新的图形和数字/文字输出

我不想一直运行自己的计算机,所以应该采用一种云解决方案(我猜?!?)。

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

3 个答案:

答案 0 :(得分:15)

您可以查看FastRWeb - 它为R脚本提供服务,就像它们是网页一样,支持图形和常规输出。它使用Rserve,使其比任何涉及启动R的解决方案(例如RRscript)快得多。它可以通过CGI或PHP在任何网络服务器上运行。

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

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

其他解决方案是RApache,它将R直接嵌入到apache网络服务器中。

编辑:而且杰夫现在Rook使用嵌入式R HTTP服务器(感谢Joshua指出那个)。

您提到每天运行它 - 如果您不需要在线分析,您只需使用R生成html页面和png文件并将其发送到您的网络服务器 - 所有这些都在自动脚本中。有许多R包可以促进HTML输出 - 只需在CRAN包列表中搜索HTML。

答案 1 :(得分:5)

使用Rscriptcat打印HTTP响应,就像从任何CGI-bin打印一样。例如,设置响应的内容类型,然后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>")

答案 2 :(得分:2)

在Apache / PHP框中考虑使用Rscript进行非常简单的设置。如果您有Windows服务器(因为R服务器的其他几个选项似乎需要Linux),这种方法可能尤其重要。

以下示例假定Windows下的Apache / PHP。

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);
} 

WebApp R界面(WebAppR.R)

## 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=" "))))

从PHP调用WebAppR(),将R代码作为包含在双引号"中的字符串,并用反引号"`"替换所有R代码引号。您可以在此调用中source()另一个脚本,或只是cat()某个函数的结果。结果将合并到PHP页面中。一个重要的限制是在同一个R语句中不可能使用两种类型的引号(通常是“和”)。如果你打算返回带有引号的HTML,最简单的方法就是使用一个源脚本。将cat()结果而不是在WebAppR()调用中包含HTML。