[R-SIG-Mac] Fwd: [R] How to avoid copy-paste when copying code from this list
David Winsemius
dwinsemius at comcast.net
Sat Sep 19 17:56:58 CEST 2009
This material from Duncan Murdoch may be useful to Mac users:
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
More information about the R-SIG-Mac
mailing list