[R] no doubt a dumb question, but..

Martin Maechler maechler at stat.math.ethz.ch
Tue Nov 9 09:07:38 CET 2004

>>>>> "Marc" == Marc Schwartz <MSchwartz at MedAnalytics.com>
>>>>>     on Mon, 08 Nov 2004 22:27:47 -0600 writes:

    Marc> On Mon, 2004-11-08 at 21:56, Dr. John R. Vokey wrote:
    >> Yes, I am a newbie at R, but it is not the complex
    >> commands in R that have me baffled, but simple data
    >> commands.  For example, why does something like:
    >> > plot(Girth ~ Height)
    >> *not* work after a command that allegedly loads the data:
    >> > data(trees)
    >> with the error message:
    >> Error in eval(expr, envir, enclos) : Object "Girth" not
    >> found
    >> but does work after the command:
    >> > attach(trees)
    >> ?

    Marc> As per ?attach:

    Marc> "By attaching a data frame to the search path it is
    Marc> possible to refer to the variables in the data frame
    Marc> by their names alone, rather than as components of the
    Marc> data frame (eg in the example below, height rather
    Marc> than women$height)."

    Marc> data(trees) simply loads the dataset, but does not
    Marc> place it in the search path, which is what
    Marc> attach(trees) does.

    Marc> Prior to using attach(trees), you would need to use:

    Marc> plot(trees$Girth ~ trees$Height)

    Marc> to tell R that the variables Girth and Height are in
    Marc> the data frame called 'trees'.

Yes, thank you, Marc!

For the specific case at hand, however, the recommdend way is to use

  plot(Girth ~ Height, data = trees)

Further note that many of us try to avoid attach()ing data frames
(most of the time; not always) and we have provided the nice alternative
    with( <data> ,  <expression_body> ) 

So, for the current example, you could also say

  with(trees, plot(Girth ~ Height))

The main advantage of with(): Only inside it, the components of
'trees' are visible - no need to remember to  detach() ;
see also  help(with) and its examples.

Martin Maechler

More information about the R-help mailing list