2013-10-30 38 views
5

如何獲取當前環境中可用的數據幀名稱向量?我試過了:獲取可用數據幀列表

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

但是這個失敗是因爲ls返回字符串的向量。我打算將此列表用作Shiny應用程序中動態選擇的輸入。

+2

我使用基於[這個問題]的修改的'lsos()'函數(http://stackoverflow.com/questions/1358003/tricks-to-manage-the-available-memory-in-an-r-session ) –

回答

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)))] 

get()將返回給定角色名稱的對象的值。

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