我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)
此代码不提供任何错误消息,但也不会将任何内容复制到剪贴板.有什么建议?
jub*_*uba 33
我在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)
Run Code Online (Sandbox Code Playgroud)
这clip是一个R对象.
如果你将一个字符串"clip"传递给file参数R会认为它是一个文件名,而不是在剪贴板中找到你的数据,你会在你的R会话工作目录中找到一个名为"clip"的文件,里面有你的数据.
您可以使用Kmiscpackage,它包含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
Run Code Online (Sandbox Code Playgroud)
在 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,...)
}
Run Code Online (Sandbox Code Playgroud)
和这个:
paste_from_clipboard = function(sep="\t",header=T,...) {
read.table(pipe("pbpaste")
,sep=sep
,header=header,...)
}
Run Code Online (Sandbox Code Playgroud)
这是一个老问题,但当我在搜索如何将某些东西放到剪贴板上时,它仍然是最受欢迎的.
现在有一个比这里的任何答案更好的解决方案:clipr包.
clipr::write_clip()是你所需要的全部.它适用于Windows,OS X和X11.
从帮助文件:"write_clip()尝试以有用的方式聪明地编写对象.如果传递data.frame或矩阵,它将使用write.table格式化它以粘贴到外部电子表格程序.否则将强制对象为字符向量.auto将检查对象类型,否则可以显式指定表或字符."
我还写了一个小帮助函数来将最后一个结果放到剪贴板上:
wc <- function(x = .Last.value) {
clipr::write_clip(x)
}
Run Code Online (Sandbox Code Playgroud)
我发现这个很好的代码可以直接从剪贴板导入 Mac 中的数据\nMarco Ghislanzoni 的答案
\n\n诀窍是使用管道文件。R中的管道文件可以通过pipe函数来寻址。接下来你需要知道Mac剪贴板对应的管道文件的正确名称,即\xe2\x80\x9cpbpaste\xe2\x80\x9d。
\n\n将所有内容放在一起后,您就拥有了 read.table 命令的正确语法:
\n\n从 Mac OS X 剪贴板导入数据
\n\ndata <- read.table(pipe("pbpaste"), sep="\\t", header=T)\nRun Code Online (Sandbox Code Playgroud)\n