我正在尝试使用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)
此代码不提供任何错误消息,但也不会将任何内容复制到剪贴板。 有什么建议吗?
答案 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版本中使用相同的参数,他们使用字符向量作为输入和输出。