我正在尝试在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()
功能但我已经阅读了一些令人沮丧的帖子。在这种情况下,什么是更好的解决方案?
谢谢!
答案 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中的对象冲突,则可能会发生奇怪的事情,例如上面显示的代码中的最后两个结果。