我试图在我的Windows机器中将一些数据直接从R复制到剪贴板.我在一些网站上发现使用file ="clipboard"会起作用.确实如此,但对于非常小的数据集.
例如:
如果我复制一个小数据集(100个obs),它可以顺利运行.
df1 <- data.frame(x=runif(100))
write.table(df1, file="clipboard", sep="\t", col.names=NA)
Run Code Online (Sandbox Code Playgroud)
但如果我将观察结果增加到10,000,则会失败:
df1 <- data.frame(x=runif(10000))
write.table(df1, file="clipboard", sep="\t", col.names=NA)
Run Code Online (Sandbox Code Playgroud)
错误是:
警告消息:在.External2中(C_writetable,x,file,nrow(x),p,r
对此有任何解决方法吗?
eli*_*ing 35
如果您输入,?connections您将找到答案.
这是相关部分:
"当写入剪贴板时,仅在连接关闭或刷新时才将输出复制到剪贴板.要写入剪贴板的文本有32Kb的限制.这可以通过使用例如文件("剪贴板 - 128")给128Kb."
所以,解决方案非常简单:
df1 <- data.frame(x=runif(10000))
write.table(df1, file="clipboard-16384", sep="\t", col.names=NA)
Run Code Online (Sandbox Code Playgroud)
请注意,Kb的数量只是一个示例,因此您可以根据需要进行更改(我将2 ^ 14放入应该对您的数据集来说已经足够了,但是您可以将其更多地增加.不确定哪个是难的尽管如此.也许物理记忆?)
我喜欢只使用我需要的内存。所以我让 object.size() 函数弄清楚我需要什么。另外,我通常喜欢source一个我喜欢经常使用的函数。
df1 <- data.frame(x=runif(10000))
write.excel <- function(x,row.names=FALSE,col.names=TRUE,...) {
write.table(x,file = paste0("clipboard-", object.size(x)),sep="\t",row.names=row.names,col.names=col.names,...)
}
write.excel(df1, FALSE, TRUE)
Run Code Online (Sandbox Code Playgroud)
检查 object.size 是否小于 memory.size 可能是谨慎的做法。如有必要,让这件事失败。
希望这可以帮助。