如何从R写到mac上的剪贴板

时间:2013-01-27 11:55:49

标签: r clipboard

我正在尝试使用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)

此代码不提供任何错误消息,但也不会将任何内容复制到剪贴板。     有什么建议吗?

6 个答案:

答案 0 :(得分:31)

我在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会话工作目录中找到一个名为“剪辑“包含您的数据。

答案 1 :(得分:7)

您可以使用Kmisc包,它包含2个用于剪贴板I / O(读/写)mult-iplatform的函数。

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

答案 2 :(得分:5)

这是一个老问题,但在我搜索如何将某些东西放到剪贴板上时,它仍然是最受欢迎的。

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

clipr::write_clip()就是你所需要的。它适用于Windows,OS X和X11。

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

我还写了一个小帮助函数来将最后一个结果放到剪贴板上:

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

答案 3 :(得分:4)

我发现这个很好的代码可以直接从剪贴板导入Mac中的数据 Marco Ghislanzoni的答案

诀窍是使用管道文件。 R中的管道文件可以通过管道功能进行寻址。接下来,您需要知道与Mac剪贴板对应的管道文件的正确名称,即“pbpaste”。

将所有内容放在一起后,您就拥有了read.table命令的正确语法:

从Mac OS X clipboardR导入数据

data <- read.table(pipe("pbpaste"), sep="\t", header=T)

答案 4 :(得分:3)

在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 :(得分:1)

我刚写了some generic functions,它适用于windows和mac。要在Windows版本中使用相同的参数,他们使用字符向量作为输入和输出。