Rook: Difference between revisions
Appearance
Created page with " Since R 2.13, the internal web server was exposed. [https://docs.google.com/present/view?id=0AUTe_sntp1JtZGdnbjVicTlfMzFuZDQ5dmJxNw Tutorual from useR2012] and [https://gith..." |
(No difference)
|
Latest revision as of 14:27, 12 August 2019
Since R 2.13, the internal web server was exposed.
Tutorual from useR2012 and Jeffrey Horner
Here is another one from http://www.rinfinance.com.
Rook is also supported by [rApache too. See http://rapache.net/manual.html.
Google group. https://groups.google.com/forum/?fromgroups#!forum/rrook
Advantage
- the web applications are created on desktop, whether it is Windows, Mac or Linux.
- No Apache is needed.
- create multiple applications at the same time. This complements the limit of rApache.
4 lines of code example.
library(Rook)
s <- Rhttpd$new()
s$start(quiet=TRUE)
s$print()
s$browse(1) # OR s$browse("RookTest")
Notice that after s$browse() command, the cursor will return to R because the command just a shortcut to open the web page http://127.0.0.1:10215/custom/RookTest.
We can add Rook application to the server; see ?Rhttpd.
s$add(
app=system.file('exampleApps/helloworld.R',package='Rook'),name='hello'
)
s$add(
app=system.file('exampleApps/helloworldref.R',package='Rook'),name='helloref'
)
s$add(
app=system.file('exampleApps/summary.R',package='Rook'),name='summary'
)
s$print()
#Server started on 127.0.0.1:10221
#[1] RookTest http://127.0.0.1:10221/custom/RookTest
#[2] helloref http://127.0.0.1:10221/custom/helloref
#[3] summary http://127.0.0.1:10221/custom/summary
#[4] hello http://127.0.0.1:10221/custom/hello
# Stops the server but doesn't uninstall the app
## Not run:
s$stop()
## End(Not run)
s$remove(all=TRUE)
rm(s)
For example, the interface and the source code of summary app are given below
app <- function(env) {
req <- Rook::Request$new(env)
res <- Rook::Response$new()
res$write('Choose a CSV file:\n')
res$write('<form method="POST" enctype="multipart/form-data">\n')
res$write('<input type="file" name="data">\n')
res$write('<input type="submit" name="Upload">\n</form>\n<br>')
if (!is.null(req$POST())){
data <- req$POST()[['data']]
res$write("<h3>Summary of Data</h3>");
res$write("<pre>")
res$write(paste(capture.output(summary(read.csv(data$tempfile,stringsAsFactors=FALSE)),file=NULL),collapse='\n'))
res$write("</pre>")
res$write("<h3>First few lines (head())</h3>");
res$write("<pre>")
res$write(paste(capture.output(head(read.csv(data$tempfile,stringsAsFactors=FALSE)),file=NULL),collapse='\n'))
res$write("</pre>")
}
res$finish()
}
More example: