R中的线性回归:" eval中的错误(expr,envir,enclos):找不到对象"

时间:2014-09-09 20:21:40

标签: r regression

我正在尝试在R中进行简单的最小二乘回归,并且不断出现错误。这真是令人沮丧,任何人都可以指出我做错了吗?

首先我附上数据集(17个变量,440个观测值,每个观测值在一行上,没有列标题)。在这里,我得到一个“蒙面”错误。根据我的阅读,当对象重叠时会发生“屏蔽”错误。但是在这里我没有使用任何软件包,而是默认,我在此之前加载了一个新的工作区图像。不确定这个错误是指什么?

> cdi=read.table("APPENC02.txt", header=FALSE)
> attach(cdi)
The following objects are masked from cdi (position 3):

    V1, V10, V11, V12, V13, V14, V15, V16, V17, V2, V3, V4, V5, V6, V7, V8, V9

接下来,由于数据集没有标题,我使用colnames()命令添加列名,然后使用head()命令检查我的工作:

colnames(cdi)<- c("IDnmbr","Countynm","Stateabv","LandArea","totpop","youngpct","oldpct","actphy","hspbed","srscrime","hsgrad","BAgrad","povpct","unempct","pcincome","totincome","georegion")
> head(cdi)
  IDnmbr    Countynm Stateabv LandArea  totpop youngpct oldpct actphy hspbed srscrime hsgrad BAgrad povpct unempct pcincome totincome georegion
1      1 Los_Angeles       CA     4060 8863164     32.1    9.7  23677  27700   688936   70.0   22.3   11.6     8.0    20786    184230         4
2      2        Cook       IL      946 5105067     29.2   12.4  15153  21550   436936   73.4   22.8   11    etcetc(manually truncated)

现在最烦人的部分:我无法让lm()函数起作用!

> model1=lm(actphy~totpop)
Error in eval(expr, envir, enclos) : object 'actphy' not found

这不是大写/小写问题,我尝试过"actphy"actphy。是什么给了什么?

此外,我正在关注的手册建议使用attach()功能但我已经阅读了一些令人沮丧的帖子。在这种情况下,什么是更好的解决方案?

谢谢!

1 个答案:

答案 0 :(得分:7)

作为@joran的评论,attach是一件危险的事情。例如,请看一下这组简单的代码:

> x <- 2:1
> d <- data.frame(x=1:2, y=3:4)
> lm(y~x)
Error in eval(expr, envir, enclos) : object 'y' not found
> lm(y~x, data=d)

Call:
lm(formula = y ~ x, data = d)

Coefficients:
(Intercept)            x  
          2            1  

> attach(d)
The following object is masked _by_ .GlobalEnv:

    x

> lm(y~x, data=d)

Call:
lm(formula = y ~ x, data = d)

Coefficients:
(Intercept)            x  
          2            1  

> lm(y~x)

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
          5           -1  

使用attach将data.frame置于搜索路径上,这样您就可以通过不指定lm参数来欺骗data。但是,这意味着如果全局环境中的对象的名称与data.frame中的对象冲突,则可能会发生奇怪的事情,例如上面显示的代码中的最后两个结果。