如何在Mac上从R写入剪贴板?

31

我正在尝试使用write.table函数在Mac OS系统上将内容写入剪贴板。从其他帖子中,我已经尝试过:

data <- rbind(c(1,1,2,3), c(1,1, 3, 4), c(1,4,6,7))
clip <- pipe("pbcopy", "w")                       
write.table(data, file="clip")                               
close(clip)

这段代码没有任何错误信息,但也没有将任何内容复制到剪贴板。有什么建议吗?


参见:https://dev59.com/zWox5IYBdhLWcg3wr2To#9036742 - Rob
6个回答

37

我没有任何运行 OS X 的机器来测试它,但我认为你应该只使用clip而不是"clip"

data <- rbind(c(1,1,2,3), c(1,1, 3, 4), c(1,4,6,7))
clip <- pipe("pbcopy", "w")                       
write.table(data, file=clip)                               
close(clip)

这里的clip是一个R对象。

如果你把字符串"clip"传递给file参数,R会认为它是一个文件名,而不是在剪贴板中查找数据,你会在R会话工作目录中找到一个名为"clip"的文件,并在其中找到你的数据。


这个适用于数据,但对于带有特殊字符的字符串不起作用!! - Shambho
2
只是打印一个空字符串:" " - Shambho

23

这是一个老问题,但当我搜索如何将内容复制到剪贴板时,它仍然是热门搜索结果之一。

现在有一个比这里的任何答案都要好得多的解决方案:使用clipr包。

clipr::write_clip()就是你所需要的。它可以在Windows、OS X和X11上运行。

根据帮助文件的说明:"write_clip()会尝试智能地以有用的方式写入对象。如果传递了data.frame或matrix,则会使用write.table将其格式化为可粘贴到外部电子表格程序中的形式。否则,它将强制将对象转换为字符向量。auto将检查对象类型,否则可以显式指定table或character。"

我还编写了一个小助手函数,将最后的结果复制到剪贴板:

wc <- function(x = .Last.value) {
  clipr::write_clip(x)
}

7
您可以使用 Kmisc 包,它包含 2 个针对多平台的剪贴板 I/O(读/写)函数。
data <- data.frame(x1 = c(1,1,2,3), x2= c(1,1, 3, 4), x3= c(1,4,6,7))
write.cb(data)               ## wrapper to write.table in pipe("pbcopy") on MAC 
dat <- read.cb(header=T)     ## wrapper to read.table from pipe("pbpaste") on MAC
dat
  x1 x2 x3
1  1  1  1
2  1  1  4
3  2  3  6
4  3  4  7

7
我的 Mac 上似乎无法运行!我遇到了一个错误,提示说:"Error in close.connection(file) : invalid connection"。 - Shambho

6
在 Mac OS X 上尝试以下方法:
copy_to_clipboard = function(x,sep="\t",col.names=T,...) { 
  write.table(x
             ,file = pipe("pbcopy")
             ,sep=sep
             ,col.names = col.names
             ,row.names = F
             ,quote = F,...)
}

以及这个:

paste_from_clipboard = function(sep="\t",header=T,...) {       
  read.table(pipe("pbpaste")
            ,sep=sep
            ,header=header,...) 
}

5
我找到了一个很好的代码,可以直接从Mac剪贴板导入数据,这是Marco Ghislanzoni的答案。
技巧在于使用管道文件。R中的管道文件可以通过pipe函数进行访问。接下来你需要知道对应于Mac剪贴板的管道文件的正确名称,即“pbpaste”。
一旦将所有内容组合在一起,就可以使用read.table命令的正确语法:
从Mac OS X剪贴板导入数据。
data <- read.table(pipe("pbpaste"), sep="\t", header=T)

1
我刚刚写了一些通用函数,适用于Windows和Mac。为了在Windows版本中使用相同的参数,它们使用字符向量作为输入和输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接