2013-10-30 12 views
5

मैं वर्तमान वातावरण में उपलब्ध डेटा फ्रेम नामों का वेक्टर कैसे प्राप्त करूं? मैं कोशिश की है:उपलब्ध डेटा फ्रेम की सूची प्राप्त करें

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

लेकिन इस तार की वजह से ls रिटर्न वेक्टर विफल रहता है। मैं चमकदार ऐप में गतिशील चयन के लिए इनपुट के रूप में इस सूची का उपयोग करने की योजना बना रहा हूं। मुझे लगता है कि आप डेटा खुद को फ्रेम के बजाय इन आंकड़ों फ्रेम की वास्तविक नाम के लिए पूछ रहे हैं

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

मैं [इस प्रश्न] के आधार पर एक संशोधित 'lsos()' फ़ंक्शन का उपयोग करता हूं (http://stackoverflow.com/questions/1358003/tricks-to-manage-the-available-memory-in-an-r- सत्र) –

उत्तर

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() 'स्पष्ट रूप से' ग्लोबलएएनवी 'को लक्षित कर रहा है जबकि' ls() 'नहीं है (फ़ंक्शन में सही काम नहीं करेगा)। कुछ ऐसा कर सकता था: 'नाम (फ़िल्टर (isTRUE, eapply (.GobalEnv, is.data.frame)))' फिर 'ls()' या 'असूची() 'की आवश्यकता नहीं है। – MadScone

+0

@ मैडस्कोन हाँ, मैं आखिरी पंक्ति के साथ थोड़ा सा था। मैंने अभी एक विकल्प रखा है। – James

3

आप get की जरूरत है, इस कोशिश? आप कर सकते हैं:

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

get() एक वस्तु एक चरित्र का नाम दिया की मान प्रदान करेंगे।

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

मैं एक संशोधित lsos() समारोह आधारित का उपयोग मूल रूप से ही बात कर के


tidier रास्ता 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 
01 पर
संबंधित मुद्दे