6

私はたくさんの大きなデータフレームを持っているので、それらを表示したいときはいつでも以下を使わなければなりませんhead:

head( blahblah(somedata) )

頭をずっとタイプしていると最初の数百回で古くなってしまうので、できれば簡単にできる方法が欲しいです。Java と比較して R が優れている点の 1 つは、秘密の呪文を知っていれば、このようなことが非常に簡単な場合が多いことです。

オプションを検索したところmax.print、時間の遅延があることを除いて、ほとんど機能する が見つかりました。

head( blahblah(somedata) )

.... 瞬時に(私の認識の範囲内で)

options(max.print=100)
blahblah(somedata)

.... 約 3 秒かかるので、タイピングよりも長くなります。head

head大きなデータ構造を印刷するときに自動的に適用 する方法はありますか?

この動作を再現するコード:

long_dataset = data.frame(a = runif(10e5), 
                          b = runif(10e5), 
                          c = runif(10e5))
system.time(head(long_dataset))
options(max.print = 6)
system.time(print(long_dataset))
4

2 に答える 2

7

私のコメントを答えに入れると、data.tableパッケージ(オブジェクトでdata.tableはなくdata.frame)を使用すると、最初の5行と最後の5行のみが自動的に出力されます(data.tableが100行を超えると)

library(data.table)
DT <- data.table(long_data)
DT

      1: 0.19613138 0.88714284 0.25715067
      2: 0.25405787 0.76544909 0.75632468
      3: 0.24841384 0.22095875 0.52588596
      4: 0.72766161 0.79696771 0.88802759
      5: 0.02448372 0.77885568 0.38199993
     ---                                 
 999996: 0.28230967 0.09410921 0.84420162
 999997: 0.73598931 0.86043537 0.30147089
 999998: 0.86314546 0.90334347 0.08545391
 999999: 0.85507851 0.46621131 0.23892566
1000000: 0.33172155 0.43060483 0.44173400

data.table FAQ 2.11は、これを明示的に扱います。


data.frame変換したくない既存のオブジェクトを処理するために編集します。

data.frame既存のオブジェクトをオブジェクトに変換することに躊躇している場合は、次のようdata.tableに定義できます。print.data.framedata.table:::print.data.table

print.data.frame <- data.table:::print.data.table

long_dataset

      1: 0.19613138 0.88714284 0.25715067
      2: 0.25405787 0.76544909 0.75632468
      3: 0.24841384 0.22095875 0.52588596
      4: 0.72766161 0.79696771 0.88802759
      5: 0.02448372 0.77885568 0.38199993
     ---                                 
 999996: 0.28230967 0.09410921 0.84420162
 999997: 0.73598931 0.86043537 0.30147089
 999998: 0.86314546 0.90334347 0.08545391
 999999: 0.85507851 0.46621131 0.23892566
1000000: 0.33172155 0.43060483 0.44173400
于 2012-10-23T11:01:33.057 に答える
5

@thelatemail の提案に賛成します。つまり、再定義しprint.data.frameます。

print.data.frame <- function(df) {
   if (nrow(df) > 10) {
      base::print.data.frame(head(df, 5))
      cat("----\n")
      base::print.data.frame(tail(df, 5))
   } else {
      base::print.data.frame(df)
   }
}

data.frame(x=1:100, y=1:100)
#   x y
# 1 1 1
# 2 2 2
# 3 3 3
# 4 4 4
# 5 5 5
# ----
#       x   y
# 96   96  96
# 97   97  97
# 98   98  98
# 99   99  99
# 100 100 100

より精巧なバージョンでは、すべてをまとめてヘッダーの繰り返しを避けることができますが、アイデアはわかります。

そのような関数を.RprofileまたはRprofile.siteファイル (「参考文献」を参照?Startup) に入れることができるので、R セッションを開始するたびにそこにあるようになります。

于 2012-10-24T00:47:50.767 に答える