我想在网页上提供以下服务:
我不想一直运行自己的计算机,所以应该采用一种云解决方案(我猜?!?)。
您对如何实现上述想法有什么想法吗?
答案 0 :(得分:15)
您可以查看FastRWeb - 它为R脚本提供服务,就像它们是网页一样,支持图形和常规输出。它使用Rserve,使其比任何涉及启动R的解决方案(例如R
或Rscript
)快得多。它可以通过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)
使用Rscript
和cat
打印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。