2016-08-13 5 views
1

大量のデータをRのクリップボードに貼り付けるにはどうすればよいですか?大量のデータをクリップボードにペーストするR

クリップボードに、またはWindows NT以降に導入することを(少し)拡大128キロバイトのクリップボードに貼り付けるwrite.tableを使用することができます。

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など他のプログラムで読み取り可能な形式でクリップボードに大量のデータをそこにどのような方法がありますか?

+0

達成したい具体的なケースは何ですか?代わりにダウンロードデータをCSV形式に保存するか、Excel形式で保存する機能を提供してみませんか? – miraculixx

答えて

4

128から16384に変更すると警告が消えます。あなたは限界を増やす必要があります。以下のコマンドを実行すると、簡単にExcelに直接貼り付けることができます。

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

128kbを超えるデータを貼り付ける場合は、文字列としてデータを貼り付ける必要があります。非常に大きな表をwriteClipboard(knitr::kable(big))を使用してマークダウン形式で貼り付けることができますが、これは大きなパッケージを使用し、多くの書式設定文字を含む表を提供します。

このコードでは、toString()を使用してdata.frameを文字列に変換した後、改行文字で区切られたタブになるように書式を変更しています。これにより、大きなデータテーブル(最大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) 

これは非常にかかわらず、資源集約され、おそらくより効率的なソリューションが存在していますか?

関連する問題