Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
In this article, I show you how to create a data.frame
from a text submitted in a textarea
field with FastRWeb.
Requirements
- FastRWeb installed
- Knowledge of webforms
?read.table
- Experience in HTML5
Submit
This example needs two scripts. The first one contains the webform. I wrote a FastRWeb script in order to work in /var/FastRWeb/web.R/
. This form could have been a static HTML page. Paste the code below in /var/FastRWeb/web.R/tablesubmit.R
.
run <- function() { out("<!doctype html><html lang='en'><head><title>Submit a Table</title>", "<charset='UTF-8'/></head><body><header><h1>Submit a Table</h1>", "<p>This is an example showing how to read a text posted in a ", "<code>textarea</code> and create a data frame from it.</p></header>", sep = "", eol = "") out("<form method='post' action='textareatodf' ", "enctype='multipart/form-data' name='form'>", sep = "", eol = "") out("<p>Paste the table content in the text area below.</p>") out("<textarea name='MyTable' rows=15 cols=80></textarea>") out("<br/><input type='submit' /></form>") out("</body></html>") done() }
Output
To retrieve the the submitted data, read them and create your data.frame
, you’ll respectively use the functions parse.multipart()
, textConnection()
and read.table()
. These last two are installed with R base. parse.multipart()
is available if you have installed la version 1.1 de FastRWeb.
Paste the text below in /var/FastRWeb/web.R/textareatodf.R
.
run <- function(MyTable) { # HTML out("<!doctype html><html lang='en'><head><title>Data Frame</title>", "<charset='UTF-8'/></head><body><header><h1><code>textarea</code> ", "to <code>data.frame</code></h1></header>", sep = "", eol = "") # Retrieve the data in a 'multipart/form-data' form if (grep("^multipart", request$c.type)) { pars <- parse.multipart() } else { } # Create the data frame try(MyDF <- read.table(file = textConnection(pars$MyTable), header = FALSE, sep = "\t")) # HTML output if (!exists("MyDF")) { out("<h2>Something went wrong…</h2>", "<p>Make sure your table has the same number of elements for each ", "row.</p>", sep = "", eol = "") } else { out("<h2>Your data frame</h2><p>This is your data frame.</p>") oprint(MyDF) oprint(sapply(MyDF, class)) } out("</body></html>") done() }
To run this script, go here : http://localhost/cgi-bin/R/tablesubmit
Testing
Copy and paste the data from à spreadsheet (either LibreOffice Calc or Excel). The non-ASCII characters are handled correctly if the users did not change their browser encoding. You may want to use the options read.table()
such as sep
, col.names
or colClasses
.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.