将大量数据粘贴到 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)
如何将大量数据粘贴到 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)