Managing Your Environment

You can use a few useful commands to interact with the R session.

ls will list all of the variables and functions stored in the global environment (your working R session):

ls()

Output
[1] "args"    "dest_md" "op"      "src_rmd" "x"       "y"      


Tip: hidden objects

Like in the shell, ls will hide any variables or functions starting with a "". by default. To list all objects, type ls(all.names=TRUE) instead

Note here that we didn't give any arguments to ls, but we still needed to give the parentheses to tell R to call the function.

If we type ls by itself, R prints a bunch of code instead of listing objects.

ls

Output
function (name, pos = -1L, envir = as.environment(pos), all.names = FALSE, 
    pattern, sorted = TRUE) 
{</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">missing</span><span class="pun">(</span><span class="pln">name</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        pos </span><span class="pun"><-</span><span class="pln"> tryCatch</span><span class="pun">(</span><span class="pln">name</span><span class="pun">,</span><span class="pln"> error </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">e</span><span class="pun">)</span><span class="pln"> e</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">inherits</span><span class="pun">(</span><span class="pln">pos</span><span class="pun">,</span><span class="pln"> </span><span class="str">"error"</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            name </span><span class="pun"><-</span><span class="pln"> substitute</span><span class="pun">(</span><span class="pln">name</span><span class="pun">)</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="kwd">is</span><span class="pun">.</span><span class="pln">character</span><span class="pun">(</span><span class="pln">name</span><span class="pun">))</span><span class="pln"> 
                name </span><span class="pun"><-</span><span class="pln"> deparse</span><span class="pun">(</span><span class="pln">name</span><span class="pun">)</span><span class="pln">
            warning</span><span class="pun">(</span><span class="pln">gettextf</span><span class="pun">(</span><span class="str">"%s converted to character string"</span><span class="pun">,</span><span class="pln"> 
                sQuote</span><span class="pun">(</span><span class="pln">name</span><span class="pun">)),</span><span class="pln"> domain </span><span class="pun">=</span><span class="pln"> NA</span><span class="pun">)</span><span class="pln">
            pos </span><span class="pun"><-</span><span class="pln"> name
        </span><span class="pun">}
    }
    all.names <- .Internal(ls(envir, all.names, sorted))
    if (!missing(pattern)) {</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">((</span><span class="pln">ll </span><span class="pun"><-</span><span class="pln"> length</span><span class="pun">(</span><span class="pln">grep</span><span class="pun">(</span><span class="str">"["</span><span class="pun">,</span><span class="pln"> pattern</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">fixed</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> TRUE</span><span class="pun">)))</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> 
            ll </span><span class="pun">!=</span><span class="pln"> length</span><span class="pun">(</span><span class="pln">grep</span><span class="pun">(</span><span class="str">"]"</span><span class="pun">,</span><span class="pln"> pattern</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">fixed</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> TRUE</span><span class="pun">)))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">pattern </span><span class="pun">==</span><span class="pln"> </span><span class="str">"["</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                pattern </span><span class="pun"><-</span><span class="pln"> </span><span class="str">"\\ [ "</span><span class="pln">
                warning</span><span class="pun">(</span><span class="str">"replaced regular expression pattern '[' by  '\\\\ ['"</span><span class="pun">)</span><span class="pln">
            </span><span class="pun">}
            else if (length(grep("[^\\\\)\\(<-", pattern))) {</span><span class="pln">
                pattern </span><span class="pun"><-</span><span class="pln"> </span><span class="kwd">sub</span><span class="pun">(</span><span class="str">"\\(<-"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"\\\\\\(<-"</span><span class="pun">,</span><span class="pln"> pattern</span><span class="pun">)</span><span class="pln">
                warning</span><span class="pun">(</span><span class="str">"replaced '[<-' by '\\\\(<-' in regular expression pattern"</span><span class="pun">)</span><span class="pln">
            </span><span class="pun">}
        }
        grep(pattern, all.names, value = TRUE)
    }
    else all.names
}
<bytecode: 0x55abdef9e9c8>
<environment: namespace:base>


What's going on here?

Like everything in R, ls is the name of an object, and entering the name of an object by itself prints the contents of the object. The object x that we created earlier contains 1, 2, 3, 4, 5:

x

Output
[1] 1 2 3 4 5

The object ls contains the R code that makes the ls function work! We'll talk more about how functions work and start writing our own later.

You can use rm to delete objects you no longer need:

rm(x)

If you have lots of things in your environment and want to delete all of them, you can pass the results of ls to the rm function:

rm(list = ls())

In this case, we've combined the two. Like the order of operations, anything inside the innermost parentheses is evaluated first, and so on.

In this case, we've specified that the results of ls should be used for the list argument in rm. When assigning values to arguments by name, you must use the = operator!!

If instead, we use <-, there will be unintended side effects, or you may get an error message:

rm(list <- ls())

Error
Error in rm(list <- ls()): ... must contain names or character strings


Tip: Warnings vs. Errors

Pay attention when R does something unexpected! Errors, like above, are thrown when R cannot proceed with a calculation. Warnings on the other hand usually mean that the function has run, but it probably hasn't worked as expected.

In both cases, the message that R prints out usually give you clues how to fix a problem.