Print all objects in a workspace

前端 未结 2 642
自闭症患者
自闭症患者 2021-02-12 10:03

I cannot find out how to list and print all objects in a workspace. I\'d like to see them all and understand what\'s going on. For example, ls() gives you 30 object

2条回答
  •  走了就别回头了
    2021-02-12 10:58

    Do you mean 'display' in the sense of "for every object in ls(), I want to see what I would see if I typed it into the prompt"? What if you have some matrix that's 1000x10000 - you still want to print it? I personally like ls.str() - I think it gives a nice concise overview of everything, and handles the case I just mentioned nicely.

    However if you want to basically "display" every object in the sense of typing each on the prompt, I'd suggest a loop:

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

    Since ls() returns a character vector of variable names, I need to use get(obj) which gets the variable whose name is in obj.

    You may wish to do a variation of this in order to print the variable name too, e.g.

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

    As an example:

    > 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
    

    This does have a drawback though - next time you call ls() there's now an obj in there. I'm sure there's some workaround though.

    Anyhow, I think I still prefer ls.str() for the way it handles big objects (but I work with a lot of huge (millions of elements) matrices, so that's my preference).

提交回复
热议问题