2013-10-30 4 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

을 당신이 데이터 자체 프레임보다는 이러한 데이터 프레임의 실제 이름을 묻는 것 같아? 당신은 할 수있다 :

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 
관련 문제