On 7/26/06, Philippe Grosjean <[EMAIL PROTECTED]> wrote: > Hello, > > There is a series of functions to manipulate, search, edit R Wiki pages > from within R that will be provided by the future 'rwiki' r package in
Great. > development. Here is the function that does what you want in attachment. > Best, > > Philippe Grosjean > Note there is a typo in the warning text in sourceWikiRcode. Thanks. > Gabor Grothendieck wrote: > > This was just posted to r-help: > > > > https://www.stat.math.ethz.ch/pipermail/r-help/2006-July/109931.html > > > > Now suppose we wanted to run the code on the wiki page referenced > > in that post. Currently I copy and paste the code from that wiki page into > > an R > > session (or else into a file, save it and source it). It would be > > convenient if it were possible to source the code for each of the code > > snippets > > on the referenced wiki page directly: > > > > source("http://...whatever...") > > > > Is this already possible? > > If so, how does one discover the url? > > > > If not,it would be nice to have some feature to facilitate grabbing code > > from the wiki. > > > > _______________________________________________ > > R-sig-wiki mailing list > > [email protected] > > https://stat.ethz.ch/mailman/listinfo/r-sig-wiki > > > > > > > getWikiRcode <- function(wikipage, url = "http://wiki.r-project.org/rwiki", > strip.empty.lines = TRUE, strip.output = FALSE) { > # Read the raw wiki page > Url <- paste(url, "/doku.php?id=", wikipage, "&do=export_raw", sep ="") > Raw <- readLines(Url) > > # Get only <code r> .... </code> chunks from this page > Codestart <- grep("^\\s*<code", Raw) > Codeend <- grep("^\\s*</code>", Raw) > # A little bit of checking first > if (length(Codestart) != length(Codeend) || any(Codeend <= Codestart)) > stop("Malformed wiki page (wrong <code>... </code> sections)") > # Get only r code sections (those starting with <code r> from the list > Rstart <- grep("^\\s*<code r>", Raw) > if (length(Rstart) == 0) return(character(0)) # no R code in this > page > isRsection <- Codestart %in% Rstart > Rend <- Codeend[isRsection] > > # Construct the list of text lines related to r code > R <- data.frame(Start = Rstart, End = Rend) > Seq <- function(x) seq(from = x[1], to = x[2]) > Rrows <- c(apply(R, 1, Seq), recursive = TRUE) > Rcode <- Raw[Rrows] > > # Eliminate <code r> and </code> tags > Rcode <- gsub("^\\s*</?code( r)?>.*$", "", Rcode) > > # Eliminate prompt from R code '> ', or '+ ' at the begining of a line > Rcode <- sub("^[>+] ", "", Rcode) > > # Possibly eliminate empty lines > if (strip.empty.lines) Rcode <- Rcode[Rcode != ""] > > # Possibly eliminate output (lines starting with '#!') > if (strip.output) { > Routput <- grep("^\\#\\!", Rcode) > if (length(Routput) > 0) Rcode <- Rcode[-Routput] > } > > # Return the R code > return(Rcode) > } > > rcode <- getWikiRcode("tips:data-frames:merge") > rcode > > sourceWikiRcode <- function(wikipage, echo = TRUE, url = > "http://wiki.r-project.org/rwiki", > strip.empty.lines = TRUE, strip.output = FALSE, ...) { > # Call getWikiRcode() to extract r code from wiki pages > Rcode <- getWikiRcode(wikipage = wikipage, url = url, > strip.empty.lines = strip.empty.lines, strip.output = > strip.output) > if (length(Rcode) == 0) { > warning("No r ocde in this page!") > } else { > Con <- textConnection(Rcode) > source(Con, echo = echo, ...) > close(Con) > } > } > > sourceWikiRcode("tips:data-frames:merge") > # Here, the last part of this page is not directly executable (data1 is not > defined) > # but the rest is fine! > > _______________________________________________ R-sig-wiki mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-sig-wiki
