将大量数据粘贴到 R 中的剪贴板

Paste large amount of data to clipboard in R

如何将大量数据粘贴到 R 中的剪贴板?

您可以使用 write.table 粘贴到剪贴板,或粘贴到 Windows 自 NT 以来引入的(稍微)更大的 128kb 剪贴板:

write.table(mtcars, "clipboard-128", sep="\t", row.names=FALSE)

但是,如果您尝试粘贴大型数据框,则会收到错误消息:

big = data.frame(a=sample(LETTERS, 100000, replace=TRUE), b=rnorm(100000), c=rnorm(100000))
write.table(big, "clipboard-128", sep="\t", row.names=FALSE)

Warning message:
In .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol,  :
  clipboard buffer is full and output lost

有什么方法可以将大量数据以其他程序可读的格式(例如 Excel?

如果要粘贴超过 128kb 的数据,则必须将其作为字符串进行粘贴。您可以使用 writeClipboard(knitr::kable(big)) 以降价格式粘贴非常大的 tables,但这涉及使用大包并给出带有大量格式字符的 table。

下面的代码使用 toString() 将 data.frame 转换为字符串,然后将格式更改为制表符分隔,行与行之间有换行符。这使您可以复制大数据 tables(测试高达 10 MB 没有问题)。

# copy a big data.frame to clipboard
writeBigClipboard = function(x)
{
    # convert x to a data.frame of char 
    for(col in 1:ncol(x))
        x[ , col] = as.character(x[ , col])

    # now convert its transpose into a string - so we get c(1st row), c(2nd row), ...
    x = as.data.frame( t(x), stringsAsFactors=FALSE)
    x = toString(x)

    # convert the delimiter from comma to tab
    x = gsub('\", \"', '\t', x, fixed=TRUE)

    # convert EOL to a newline character
    x = gsub('\"), c(\"', '\n', x, fixed=TRUE)

    # chop off the first c(\" and the last \")
    x = substr(x, 4, nchar(x)-2)

    # now paste the goodies into excel
    writeClipboard(x)
}

示例:

big = data.frame(a=sample(LETTERS, 100000, replace=TRUE), b=rnorm(100000), c=rnorm(100000))
writeBigClipboard(big)

虽然这非常耗费资源,也许存在更有效的解决方案?

将 128 更改为 16384,警告将消失。您需要增加限制。执行以下命令后,您可以直接粘贴Excel。

    write.table(big, "clipboard-16384", sep="\t", row.names=FALSE)