我试图在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()
函数,但我读过一些不鼓励使用它的帖子。在这种情况下,什么是更好的解决方案?
谢谢!
正如@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放在搜索路径上,这允许您通过不指定data
参数来在lm
中作弊。然而,这意味着,如果全局环境中有对象的名称与data.frame中的对象冲突,那么可能会发生奇怪的事情,就像上面代码中的最后两个结果一样。