25

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

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

4

5 に答える 5

37

ls()「のすべてのオブジェクトについて、プロンプトに入力した場合に何が表示されるかを確認したい」という意味の「表示」を意味しますか?1000x10000のマトリックスがある場合はどうなりますか?それでも印刷したいですか?私は個人的に好きですls.str()-それはすべての素晴らしい簡潔な概要を与えて、そして私がちょうど上手に述べたケースを処理すると思います。

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

for ( obj in ls() ) { print(get(obj)) }

ls()変数名の文字ベクトルを返すのでget(obj)、名前がにある変数を取得するを使用する必要があります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()大きなオブジェクトを処理する方法を好むと思います(しかし、私はたくさんの巨大な(数百万の要素)行列を扱うので、それが私の好みです)。

于 2012-04-30T11:48:11.817 に答える
10

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

ls()

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

mget(ls())

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

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

于 2018-04-02T19:30:53.650 に答える
8

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

于 2012-04-30T11:48:06.490 に答える
5

私を信じてください:あなたは本当にあなたのすべてのオブジェクトのすべての内容を印刷したくありません。印刷を想像してみてくださいmatrix(1:1e5,100,1000):-(。、、などの便利なRツールがいくつかあります。これらのツールはsummary、データオブジェクトについてtablestrそれが何であり、何をしたいのかを知るのに十分な情報を提供します。より具体的な懸念がある場合は、たとえば、「私のデータフレームのどれがNA値を持っていますか?」、検索を行うためのコマンドまたはミニ関数を書くことができます。指定された種類のすべてのオブジェクトを一覧表示するの
ような名前で自分用にいくつか書きました。lstype(objtype='closure')

于 2012-04-30T11:44:56.187 に答える
0

ワークスペースに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) ) 
  }
}
于 2017-03-09T12:07:43.903 に答える