2013-10-30 9 views
5

現在の環境でデータフレーム名のベクトルを取得するにはどうすればよいですか?私は試しました:利用可能なデータフレームのリストを取得

sapply(ls(), is.data.frame) 

lsが文字列のベクトルを返すので、これは失敗します。このリストをShinyアプリの動的選択の入力として使用する予定です。

+2

私は[この質問](http://stackoverflow.com/questions/1358003/tricks-to-manage-the-available-memory-in-an-r-session)に基づいて変更された 'lsos()'関数を使用します) –

答えて

12

あなたは環境内のオブジェクトをループにeapplyを使用することができます:

x <- 1:10 
y <- mtcars 
eapply(.GlobalEnv,is.data.frame) 
$x 
[1] FALSE 

$y 
[1] TRUE 

names(which(unlist(eapply(.GlobalEnv,is.data.frame)))) 
[1] "y" 
+1

これはいいですね。 'eapply()'は '.GlobalEnv'を明示的に対象としているのに対し、' ls() 'はそうではありません(関数内で正しく動作しません)ので、最後の行には注意してください。 'names(Filter(isTRUE、eapply(.GlobalEnv、is.data.frame)))'のようなことができます。 'ls()'や 'unlist()'の必要はありません。 – MadScone

+0

@MadSconeはい、私は最後の行で少しゆるかったです。私は今、代替案を出しました。 – James

3

あなたはこの試みる、getが必要:私はあなたがこれらのデータフレームの実際の名前ではなく、データフレームそのものを求めていると思う

x <- sapply(sapply(ls(), get), is.data.frame) 
names(x)[(x==TRUE)] 
3

を?次のようにすることができます:

l <- ls() 
l[sapply(l, function(x) is.data.frame(get(x)))] 

文字の名前が与えられたオブジェクトの値を返します。

Filter(function(x) is.data.frame(get(x)), ls()) 
2

を私はベースの修正lsos()機能を使用し、基本的に同じことをやっての


整然と方法on this question

library(devtools) 
source_url("https://raw.github.com/rsaporta/pubR/gitbranch/memoryFunctions.R") 

## only show data.frames of at least ~1KB 
lsos(t="data.frame") 

## show data.frames of any size 
lsos(t="data.frame", b=1) 

### OUTPUT 

      KB  Type Rows Columns 
anotherDF 5 data.frame 50  4 
df  0.8 data.frame 5  2 
関連する問題