web-dev-qa-db-ja.com

ワークスペース内のすべてのオブジェクトを印刷する

ワークスペース内のすべてのオブジェクトを一覧表示して印刷する方法がわかりません。それらをすべて見て、何が起こっているのかを理解したいと思います。たとえば、ls()は30個のオブジェクトを提供します。個別に入力する以外に、すべてを表示することは可能ですか。ささいなことのようですが、解決策はおそらくかなり恥ずかしいでしょう。私が近づいたのはls.str()で、オブジェクトをループするというアイデアでした。

編集これはデータフレーム用ではありません。私はデータがなく、機能がいっぱいのワークスペースを持っています。どのワークスペースがどのワークスペースを参照しているかなどを理解したいのですが

19
Rico

ls()のすべてのオブジェクトについて、プロンプトに入力したときに表示されるものを確認したい」という意味の「表示」ですか? 1000x10000のマトリックスがある場合はどうなりますか?それを印刷したいですか?私は個人的にls.str()が好きです。これにより、すべての概要がわかりやすくなり、先ほど述べたケースがうまく処理されます。

ただし、基本的にプロンプ​​トでそれぞれを入力するという意味ですべてのオブジェクトを「表示」したい場合は、ループをお勧めします。

_for ( obj in ls() ) { print(get(obj)) }
_

ls()は変数名の文字ベクトルを返すため、objに名前が含まれる変数を取得するget(obj)を使用する必要があります。

変数名も出力するために、これのバリエーションを実行したい場合があります。

_for ( obj in ls() ) { cat('---',obj,'---\n'); print(get(obj)) }
_

例として:

_> a <- 1
> b <- LETTERS[1:10]
> c <- data.frame(a=LETTERS[1:10],b=runif(10))
> for ( obj in ls() ) { cat('---',obj,'---\n'); print(get(obj)) }
--- a ---
[1] 1
--- b ---
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
--- c ---
   a         b
1  A 0.1087306
2  B 0.9577797
3  C 0.8995034
4  D 0.1434574
5  E 0.3548047
6  F 0.1950219
7  G 0.1453959
8  H 0.4071727
9  I 0.3324218
10 J 0.4342141
_

ただし、これには欠点があります。次回ls()を呼び出すと、objが存在するようになります。いくつかの回避策があると確信しています。

とにかく、私はそれでも大きなオブジェクトを処理する方法としてls.str()を好むと思います(しかし、私はたくさんの巨大な(何百万もの要素)行列を扱うので、それが私の好みです)。

30

RStudio を使用すると、環境内のすべてのオブジェクトを表示し、それぞれと直接対話できることがわかります。良いIDEは、あなたの質問が必要とするような探査を可能にするでしょう。これは、多数のオブジェクトを表示するのに特に役立ちます。

8
gauden

私を信頼してください:あなたは本当にあなたのすべてのオブジェクトのすべての内容を印刷したくないのです。 matrix(1:1e5,100,1000) :-(を出力することを想像してみてください。summarytablestrのような便利なRツールがあり、一般的にそれが何であり、何をしたいのかを知るためのデータオブジェクト。たとえば、「どのデータフレームにNA値があるか?」など、より具体的な懸念がある場合は、コマンドまたはミニ関数を記述して、 。
私はlstype(objtype='closure')のような名前で自分用にいくつかを書きました。これは、指定された種類のすべてのオブジェクトをリストします。

6
Carl Witthoft

使用する変数の名前だけが必要な場合:

ls()

内容と一緒に変数も出力したい場合は、次のコマンドを使用します。

mget(ls())

これはあなたが必要とすることをするはずです。

いくつかの行列、ベクトル、およびデータフレームを含む、新しく開いたワークスペースの場合、これは私にとってはうまく機能します。

6
Cynclida

ワークスペースに1つまたは複数の大きなオブジェクト(ベクトル、行列、リストなど)がある場合、次のコードを使用するとコンパクトな出力が得られます。

for ( obj in ls() ) { 
  cat('---',obj,'---\n');
  if ( class(get(obj)) == 'matrix'  ){
    print( get(obj)[1:min(ncol(get(obj)),10),1:min(ncol(get(obj)),10)] ) 
  }else if ( class(get(obj)) == 'numeric' |  class(get(obj)) == 'integer'  ){
    print( get(obj)[1:min(length(get(obj)),10)] )
  }else if( class(get(obj)) == 'list'){
    for (i in 1:length(get(obj))){
      if ( class(get(obj)) == 'matrix'  ){
        print( get(obj)[[i]][1:min(ncol(get(obj)[[i]]),10),1:min(ncol(get(obj)[[i]]),10)] ) 
      }else if ( class(get(obj)[[i]]) == 'numeric' |  class(get(obj)[[i]]) == 'integer'  ){
        print( get(obj)[[i]][1:min(length(get(obj)[[i]]),10)] )
      }else{
        print( get(obj)[[i]] ) 
      } 
    }
  }else{
    print( get(obj) ) 
  }
}
0
Philip Maybank