[R] Newly installed version; can't run lm function

David Winsemius dwinsemius at comcast.net
Sat Oct 20 00:52:10 CEST 2012


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

> New installation seems to have behavior I cannot figure out.  Here is illustrative sequence where I load a small data set (test) from Crawley's files and try to run a simple linear model and get an error message.  Oddly, R reports that the variable 'test$ozone' is numeric while, after attaching test, the variable ozone is not numeric.  Can someone please help?  This behavior is occurring with multiple data sets loaded from outside R.  Thank you in advance.
> Michael Grant
> 
> 
> Example:
>> test
>   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
>> is.data.frame(test)
> [1] TRUE
>> is.numeric(test$ozone)
> [1] TRUE
>> is.factor(test$garden)
> [1] TRUE
>> lm(ozone~garden)
> Error in model.frame.default(formula = ozone ~ garden, drop.unused.levels = TRUE) :
>  invalid type (list) for variable 'ozone'

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`.)

> 
>> attach(test)
>> is.numeric(ozone)

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 

> is.numeric(ozone)
[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)



> [1] FALSE
>> is.numeric(test$ozone)
> [1] TRUE
> 
> 	[[alternative HTML version deleted]]
> 

-- 

David Winsemius, MD
Alameda, CA, USA

> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)




More information about the R-help mailing list