On Sep 19, 2009, at 10:58 AM, Duncan Murdoch wrote:

On 19/09/2009 10:12 AM, Gabor Grothendieck wrote:
One solution would be to have a portable version of the
Windows
  Edit | Paste commands only
functionality that works on all platforms.
For example if a command such as this were available:
source.commands <- function(echo = TRUE, ...) {
   L <- readLines("clipboard")
   L <- grep("^[>+] ", L, value = TRUE)
   L <- gsub("^..", "", L)
   source(textConnection(L), echo = echo, ...)
}
one could just copy the email snippet and the issue this command in
the R session:
source.commands()
Building this directly into source as an option might be nice.

The Windows Rgui is uses slightly more general patterns than those so it can take output from running examples, e.g.

> example(mean)

mean> x <- c(0:10, 50)

mean> xm <- mean(x)

m
[1] 8.75 5.50

mean> mean(USArrests, trim = 0.2)
 Murder  Assault UrbanPop     Rape
   7.42   167.60    66.20    20.16

(and does it in C code, not using grep/gsub; see CleanTranscript in https://svn.r-project.org/R/trunk/src/gnuwin32/console.c) , but that's basically what it does.

However, it's hard to do this in a portable way, because not all systems support "clipboard" as the name of the clipboard for cut and paste. I think Unix/Linux systems need to be running X11, and OSX systems don't normally support it in the GUI. So it might makes sense to have a portable version of the CleanTranscript function available, but it's really up to each different system to connect it up to cut and paste.

Here's a quick version of CleanTranscript, translated to R:

CleanTranscript <- function(lines) {
lines <- grep("^[[:blank:]]*[^>+[:blank:]]*[>+]", lines, value = TRUE)
 lines <- sub("^[[:blank:]]*[^>+[:blank:]]*[>+] ?", "", lines)
}

So on systems where "clipboard" is supported, executing

source(textConnection(CleanTranscript(readLines("clipboard"))),
       echo = TRUE, max.deparse.length=Inf)

will do something similar to what the Windows "Paste commands only" menu option does, but you'd need a different incantation on other systems. And even this will sometimes mess up, e.g. it will sometimes misinterpret output that contains > or + as input.

Duncan Murdoch

On Macs (and possibly other *NIXen) the equivalent to reading from the "clipboard" is: pipe("pbpaste")

Testing shows that a simple modification after defining CleanTranscript produces no error on the example above:

> source(textConnection(CleanTranscript(readLines(pipe("pbpaste")))),
+        echo = TRUE, max.deparse.length=Inf)

> example(mean)

mean> x <- c(0:10, 50)

mean> xm <- mean(x)

mean> c(xm, mean(x, trim = 0.10))
[1] 8.75 5.50

mean> mean(USArrests, trim = 0.2)
  Murder  Assault UrbanPop     Rape
    7.42   167.60    66.20    20.16

> x <- c(0:10, 50)

--

David Winsemius, MD
Heritage Laboratories
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to