2016-08-17 7 views
2

ように私はこのようになりますdata.frameあります印刷data.frame構造文字

df <- data.frame(
    y = c(0.348, 0.099, 0.041, 0.022, 0.015, 0.010, 0.007, 0.005, 0.004, 0.003), 
    x = c(458, 648, 694, 724, 756, 790, 818, 836, 848, 876)) 

私はdata.frameを印刷するときI(明らかに)この出力を得る:

df 
#  y x 
# 1 0.348 458 
# 2 0.099 648 
# 3 0.041 694 
# 4 0.022 724 
# 5 0.015 756 
# 6 0.010 790 
# 7 0.007 818 
# 8 0.005 836 
# 9 0.004 848 
# 10 0.003 876 

はありますが私がdata.framecharacter string(またはそれに類似した)として印刷することができる関数はありますか?

magic_function(df) 
# output 
"df <- data.frame(
y = c(0.348, 0.099, 0.041, 0.022, 0.015, 0.010, 0.007, 0.005, 0.004, 0.003), 
x = c(458, 648, 694, 724, 756, 790, 818, 836, 848, 876))" 

私は、文字通り、私は出力をコピーして(再現性ため)stackoverflowの質問にそれを貼り付けることができるように"df <- data.frame(x = c(...), y = (...))"のようなものをプリントアウトしたいです!

+2

dput(df)を試してみてください。 – mkt

+0

これを簡単に割り当てることができます。例えば df2-list(y = c(0.348,0.099,0.01,0.022,0.015,01, 0.007,0.005,0.004,0.003)x = c(458,648,694,724,756,790 、 818,836,848,876)).Names = c( "y"、 "x")、row.names = c(NA、 -10L)、class = "data.frame") – mkt

+2

'data.frame'の出力から得られる出力であることは明白ではありません。実際、' data.frame'が 'base'Rにどのように出力されるのかは、' 'dplyr'' AFAIK – MichaelChirico

答えて

3

私はちょうどこれを最近しなければなりませんでした。その答えのコアは確かdputですが、capture.outputcharacterにそれを変換したい:

df.as.char <- paste(deparse(df)), collapse = "") 
df.as.char 
# [1] "structure(list(y = c(0.348, 0.099, 0.041, 0.022, 0.015, 0.01, 0.007, 0.005, 0.004, 0.003), x = c(458, 648, 694, 724, 756, 790, 818, 836, 848, 876)), .Names = c(\"y\", \"x\"), row.names = c(NA, -10L), class = \"data.frame\")" 

あなたは、私は、あなたがこれを通じ割り当てることができなかった心の中で同じもの持っていれば:

df.from.char <- eval(parse(text = df.as.char)) 
df.from.char 
# y x 
# 1 0.348 458 
# 2 0.099 648 
# 3 0.041 694 
# 4 0.022 724 
# 5 0.015 756 
# 6 0.010 790 
# 7 0.007 818 
# 8 0.005 836 
# 9 0.004 848 
# 10 0.003 876 
identical(df.from.char, df) 
# [1] TRUE 

そして、あなたは本当に

+5

あなたは 'deparse(df)'できます。 – Roland

+0

@Roland nice - 'deparse'は基本的に' capture.output(dput()) 'と同じですが、そうですか? – MichaelChirico

+1

いいえ、私はそれが同じではないと言います。 'キャプチャ。output'はテキスト接続を作成し、それに対して 'sink'を行います。おそらく 'deparse'はより効率的です。 – Roland

0

1つのオプションを使用することであることをcharacterの一部だけpaste0ように割り当て矢印が必要な場合:

dput(df) 

リターン:

structure(list(y = c(0.348, 0.099, 0.041, 0.022, 0.015, 0.01, 
0.007, 0.005, 0.004, 0.003), x = c(458, 648, 694, 724, 756, 790, 
818, 836, 848, 876)), .Names = c("y", "x"), row.names = c(NA, 
-10L), class = "data.frame") 
+2

これは上記の@mktのコメントです。あなたは後にしているすべては 'dput'ジョブをカバーする必要があり、SOに印刷するものであれば – MichaelChirico

0

私は私が何かを得たと思います!

df4so <- function(df) { 
    # collapse dput 
    # shout out to KonradRudolph, Roland and MichaelChirico 
    a <- paste(capture.output(dput(df)), collapse = "") 
    # remove structure junk 
    b <- gsub("structure\\(list\\(", "", a) 
    # remove everything after names 
    c <- gsub("\\.Names\\s.*","",b) 
    # remove trailing whitespace 
    d <- gsub("\\,\\s+$", "", c) 
    # put it all together 
    e <- paste0('df <- data.frame(', d) 
    # return 
    print(e) 
} 

df4so(df) 

出力:

StackOverflowのためのコピーと貼り付けに適し
[1] "df <- data.frame(y = c(0.348, 0.099, 0.041, 0.022, 0.015, 0.01, 0.007, 0.005, 0.004, 0.003), x = c(458, 648, 694, 724, 756, 790, 818, 836, 848, 876))" 

+0

が要因:( – emehex

+2

では動作しません。[' overflow']も参照perhapse(https://github.com/mrdwab /オーバーフローmrdwab)パッケージRの使用を切り替えるとSO投稿するための設備が付い: – MichaelChirico

+3

'dput'が私たちを与えることを' -type出力(特に、我々は '構造(リスト(...)に満足しています) - それをRにコピー&ペーストしてサンプルデータを処理することができます。 – MichaelChirico