2013-10-30 21 views
5

Come ottengo il vettore dei nomi dei frame di dati disponibili nell'ambiente corrente? Ho provato:Ottieni l'elenco dei frame di dati disponibili

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

Ma questo non riesce a causa ls rendimenti vettore di stringhe. Sto pensando di usare questa lista come input per la selezione dinamica nell'app Shiny.

+2

Uso una funzione 'lsos()' modificata in base a [questa domanda] (http://stackoverflow.com/questions/1358003/tricks-to-manage-the-available-memory-in-an-r-session) –

risposta

12

È possibile utilizzare eapply per scorrere gli oggetti in un ambiente:

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

Questo è bello. Tuttavia, con attenzione a quell'ultima riga, funzionerà correttamente solo nell'ambiente globale poiché 'eapply()' ha come target esplicito '.GlobalEnv' mentre' ls() 'non lo è (non funzionerà correttamente in una funzione). Potrebbe fare qualcosa del tipo: 'names (Filter (isTRUE, eapply (.GlobalEnv, is.data.frame)))' Quindi non c'è bisogno di 'ls()' o 'unlist()'. – MadScone

+0

@MadScone Sì, ero un po 'negligente con l'ultima riga. Ho messo un'alternativa in questo momento. – James

3

È necessario get, provate questo:

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

Penso che stai chiedendo i nomi reali di questi frame di dati piuttosto che i dati stessi frame? Si può fare:

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

get() restituirà il valore di un oggetto dato un nome del personaggio. modo


più ordinato di fare sostanzialmente la stessa cosa:

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

Io uso una versione modificata lsos() funzione di base su 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 
Problemi correlati