30

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

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

4

6 回答 6

37

我在 OS X 下没有任何机器来测试它,但我认为你应该使用 justclip而不是"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”的文件,其中包含您的数据。

于 2013-01-27T12:00:58.957 回答
18

这是一个老问题,但当我在寻找如何将某些东西放到剪贴板上时,它仍然是一个热门话题。

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

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

从帮助文件中:“write_clip() 试图以一种有用的方式聪明地编写对象。如果传递一个 data.frame 或矩阵,它将使用 write.table 对其进行格式化以粘贴到外部电子表格程序中。否则它将强制对象到字符向量。自动将检查对象类型,否则可以显式指定表或字符。

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

wc <- function(x = .Last.value) {
  clipr::write_clip(x)
}
于 2017-06-23T17:53:38.293 回答
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
于 2013-01-27T12:26:09.540 回答
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,...) 
}
于 2016-02-04T14:53:48.653 回答
4

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

诀窍是使用管道文件。R 中的管道文件可以通过 pipe 函数来处理。接下来,您需要知道与 Mac 剪贴板对应的管道文件的正确名称,即“pbpaste”。

一旦你把它们放在一起,你就有了 read.table 命令的正确语法:

从 Mac OS X 剪贴板R 导入数据

data <- read.table(pipe("pbpaste"), sep="\t", header=T)
于 2015-11-03T05:01:29.717 回答
1

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

于 2017-01-24T20:01:23.873 回答