10

举个例子,这将更有意义。CRAN 的典型 R 手册显示 R 代码,其中一行以 > 开头,缩进用 + 表示。 有关示例,请参见 http://cran.r-project.org/web/packages/doMC/vignettes/gettingstartedMC.pdf 。

问题在于,如果不将其复制到编辑器中并删除那些箭头和加号字符,您就无法将其剪切并粘贴到控制台中。有没有更简单的方法将该文本作为 R 代码执行?我想一定有人处理过这个问题。否则,我想我会写一个脚本。

4

2 回答 2

17

已经写好了。

2009 年邓肯·默多克的帖子:

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

source(textConnection(CleanTranscript(
       # This is the Windows input strategy
       readLines("clipboard")
       # See below for Mac version
                      )), 
                      echo = TRUE, max.deparse.length=Inf) 

Gabor Grothendieck 在 2009 年的后续 R-help 帖子:

process.source <- function(action = c("both", "run", "show"), echo = TRUE,
    max.deparse.length = Inf, ...) { 
    # This is the Mac input strategy
    L <- readLines(pipe("pbpaste"))
    #  for Windows devices use
    #  L <- readLines("clipboard")
    rx <- "^[[:blank:]]*[^>+[:blank:]]*[>+]" 
    is.cmd <- grepl(rx, L) 
    L[is.cmd] <- gsub(paste(rx, "?"), "", L[is.cmd]) 
    L[!is.cmd] <- paste("#", L[!is.cmd]) 
    action <- match.arg(action) 
  if (action != "run") for(el in L) cat(el, "\n") 
  if (action == "both") cat("##################################\n") 
  if (action != "show") 
       source(textConnection(L), echo = echo, 
       max.deparse.length = max.deparse.length, ...) 
invisible(L) }

注意:赞成票促使我将此作为“功能请求”发布在 RStudio 讨论板上。虽然我还没有破解它,但如果它要内置到 RStudio 框架中,它可能需要更多的测试。

于 2012-12-17T07:08:45.897 回答
0

现在有一个不错的RStudio Addin名称mischelperhttps://github.com/dracodoc/mischelper),它的一个功能就是这样做的。拥有它的好处Addin是您可以将其变成键盘快捷键。通常粘贴是Ctrl + V这样我有我想从控制台复制的脚本/代码作为Ctrl + B. 它粘贴代码,例如:

> x <- 3
> switch(x, 2+2, mean(1:10), rnorm(5))
[1]  2.2903605  2.3271663 -0.7060073  1.3622045 -0.2892720


> centre <- function(x, type) {
+ switch(type,
+        mean = mean(x),
+        median = median(x),
+        trimmed = mean(x, trim = .1))
+ }
> x <- rcauchy(10)
> centre(x, "mean")
[1] 0.8760325

进入:

x <- 3
switch(x, 2+2, mean(1:10), rnorm(5))
# [1]  2.2903605  2.3271663 -0.7060073  1.3622045 -0.2892720


centre <- function(x, type) {
  switch(type,
         mean = mean(x),
         median = median(x),
         trimmed = mean(x, trim = .1))
  }
x <- rcauchy(10)
centre(x, "mean")
# [1] 0.8760325
于 2019-10-21T20:40:57.107 回答