Skip to content

Newly installed version; can't run lm function

4 messages · Michael Grant, Jorge I Velez, David Winsemius +1 more

#
On Oct 19, 2012, at 2:26 PM, Michael Grant wrote:

            
This is not surprising for two reasons. Crawley's presumptuously named text "The R Book" teaches students to use `attach`, leaving them unprepared to deal with the rather predictable confusion that unfortunate practice leads to. (The second reason is that you have not yet used `attach`.)
And when I do that, I do not get the same result:

test <- read.table(text="  ozone garden
1      3      A
2      5      B
3      4      A
4      5      B
5      4      A
6      6      B
7      3      A
8      7      B
9      2      A
10     4      B
11     3      A
12     4      B
13     1      A
14     3      B
15     3      A
16     5      B
17     5      A
18     6      B
19     2      A
20     5      B", header=TRUE)
is.data.frame(test)
#[1] TRUE
is.numeric(test$ozone)
#[1] TRUE
is.factor(test$garden)
#[1] TRUE
lm(ozone~garden)

# Error which seems perfectly expected without a 'data' argument.
attach(test)
is.numeric(ozone)
####-------

# I get
[1] TRUE

So you have done something else. What it is we cannot tell. Why not send a letter to Crawley? He's the one you paid money for that fat book, and whose dataset you are importing in some unspecified manner. Or perhaps use:

str(test)

  
    
#
You have an object named "ozone" kicking around in your workspace/global
environment.  This is apparently not of mode "numeric" and it is masking
the "ozone" object (column) from the attached data frame "test".

Simply doing ls() would have told you this.

Presumably you also got a warning about this when you attached test.
Heed the warning!

As others have advised you ***don't use attach()***!!!

Instead, use "data= ..." in your call to lm().

     cheers,

         Rolf Turner
On 20/10/12 10:26, Michael Grant wrote: