2012-04-30 4 views
14

작업 영역의 모든 개체를 나열하고 인쇄하는 방법을 찾을 수 없습니다. 나는 그들 모두를보고 무슨 일이 일어나고 있는지 알고 싶습니다. 예를 들어 ls()은 30 개의 개체를 제공합니다. 어떻게 그것들을 개별적으로 입력하는 것 외에도, 그것들을 모두 표시하는 것이 가능합니다. 그렇게 사소한 것 같아서, 그 해결책은 아마도 당혹 스러울 것이다. 내가 간 가장 가까운 것은 ls.str()이었고 객체를 반복하는 아이디어였다.작업 영역의 모든 개체 인쇄

편집 : 이것은 데이터 프레임 용이 아닙니다. 나는 데이터가없는 함수들로 가득 찬 작업 공간을 가지고 있으며 어느 것이 어떤 것을 참조하는지 알고 싶다.

+0

관련 : http : // stackoverflow.환영합니다. com/questions/1386767/are-there-any-good-r-object-browser – GSee

+0

+1. – gauden

답변

23

"모든 객체에 대해 ls()에"프롬프트에 입력 한 것이 무엇인지보고 싶다는 의미에서 '표시'를 의미합니까? 1000x10000의 행렬을 가지고 있다면 - 여전히 인쇄하고 싶습니까? 나는 개인적으로 ls.str()을 좋아한다. 나는 모든 것에 대한 간결한 개요를 제공하고 방금 언급 한 사례를 처리한다고 생각한다. 당신은 기본적으로 "디스플레이"프롬프트에 각 입력의 의미에서 모든 객체, 나는 루프 좋을 것하려는 경우

: ls() 이후

for (obj in ls()) { print(get(obj)) } 

변수 이름의 문자 벡터를 반환 I get(obj)을 사용해야하며 이름은 obj입니다.

변수 이름도 인쇄 할 수 있도록이 변형을 사용하는 것이 좋습니다. 예를 들어

for (obj in ls()) { cat('---',obj,'---\n'); print(get(obj)) } 

:

> a <- 1 
> b <- LETTERS[1:10] 
> c <- data.frame(a=LETTERS[1:10],b=runif(10)) 
> for (obj in ls()) { cat('---',obj,'---\n'); print(get(obj)) } 
--- a --- 
[1] 1 
--- b --- 
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" 
--- c --- 
    a   b 
1 A 0.1087306 
2 B 0.9577797 
3 C 0.8995034 
4 D 0.1434574 
5 E 0.3548047 
6 F 0.1950219 
7 G 0.1453959 
8 H 0.4071727 
9 I 0.3324218 
10 J 0.4342141 

이 비록 단점을 가지고 - 당신이 거기에 지금 obj있다 ls()를 호출 다음 번에. 그래도 몇 가지 해결 방법이 있다고 확신합니다.

어쨌든 큰 오브젝트를 처리하는 방법에 대해서는 여전히 ls.str()을 선호한다고 생각합니다. 그러나 많은 매트릭스 (수백만 개의 요소) 매트릭스로 작업합니다. 그래서 내 취향입니다.)

+1

주의 : R과의 세션이 길어질 경우'for (obj in ls()) {print (get (obj)}}'를 실행하면 R이 얼어 버릴 수 있습니다. – andi

+0

목록 인쇄 방법이 있습니까 작업 영역에서 선택한 객체를 선택 하시겠습니까? –

6

나를 신뢰하라. 정말로 모든 객체의 모든 내용을 인쇄하고 싶지는 않다. matrix(1:1e5,100,1000)을 인쇄하는 것을 상상해보십시오 : summary, tablestr과 같은 유용한 R 도구가 있는데, 일반적으로 정보 객체가 무엇이며 무엇을하고 싶은지 알 수 있습니다. 예를 들어 "어떤 데이터 프레임에 NA 값이 있습니까?"와 같이 명령이나 미니 함수를 작성하여 볼 수 있습니다.
나 자신을 위해 lstype(objtype='closure')과 같은 이름으로 일부를 작성했습니다. 친절한.

8

나는 RStudio을 사용하여 환경의 모든 객체와 각각의 객체와의 직접적인 상호 작용을 볼 수 있습니다. 좋은 IDE가 사용자의 질문에서 볼 수있는 일종의 탐사를 허용 할 것이라고 확신합니다. ms 필요합니다. 이것은 특히 많은 수의 객체에 대한 뷰를 제공하는 데 유용합니다.

+0

RStudio는 매우 좋게 보입니다. – Rico

0

작업 공간 (예 : 벡터, 행렬 및/또는 목록)에 하나 이상의 대형 객체가있는 경우 다음과 같은 코드 비트가 압축 출력을 제공해야합니다.

for (obj in ls()) { 
    cat('---',obj,'---\n'); 
    if (class(get(obj)) == 'matrix' ){ 
    print(get(obj)[1:min(ncol(get(obj)),10),1:min(ncol(get(obj)),10)]) 
    }else if (class(get(obj)) == 'numeric' | class(get(obj)) == 'integer' ){ 
    print(get(obj)[1:min(length(get(obj)),10)]) 
    }else if(class(get(obj)) == 'list'){ 
    for (i in 1:length(get(obj))){ 
     if (class(get(obj)) == 'matrix' ){ 
     print(get(obj)[[i]][1:min(ncol(get(obj)[[i]]),10),1:min(ncol(get(obj)[[i]]),10)]) 
     }else if (class(get(obj)[[i]]) == 'numeric' | class(get(obj)[[i]]) == 'integer' ){ 
     print(get(obj)[[i]][1:min(length(get(obj)[[i]]),10)]) 
     }else{ 
     print(get(obj)[[i]]) 
     } 
    } 
    }else{ 
    print(get(obj)) 
    } 
} 
관련 문제