
[英]Running lm() errror: Error in xj[i] : invalid subscript type 'list'
[英]How can I fix this invalid type error using lm()?
Error in model.frame.default(formula = data$conservationstatus ~ data$latitude, :
invalid type (NULL) for variable 'data$conservationstatus
我有一个数据集(在读取 CSV 文件后称为数据),它包含“保护状态”和“纬度”列。 我正在尝试使用以下方法对这两个执行线性回归
lm(data$ConservationStatus ~ data$Latitude, data = data)
但是,我不断收到上述错误。 好像是因为我的专栏里有两个字。 我尝试过 data$Conservation Status、data$'Conservation Status'、data$Conservation.Status,但似乎没有任何效果:(
您可能colnames(data)
了变量名,请检查colnames(data)
以查看它是如何拼写的。
例如,
lm(mtcars$MPG ~ mtcars$disp)
# Error in model.frame.default(formula = mtcars$MPG ~ mtcars$disp, drop.unused.levels = TRUE) :
# invalid type (NULL) for variable 'mtcars$MPG'
lm(mtcars$mpg ~ mtcars$disp)
# Call:
# lm(formula = mtcars$mpg ~ mtcars$disp)
# Coefficients:
# (Intercept) mtcars$disp
# 29.59985 -0.04122
注意到mpg
是小写的,而不是我第一次尝试的大写。
colnames(mtcars)
# [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
我同意@akrun 的建议,而是使用lm(mpg ~ disp, data=data)
,因为命名法(对我来说)似乎更具可读性,但正如您所发现的那样,在这种情况下它会引发不同的错误。
我们可以指定没有data$
的公式。 如果列名有空格,使用反引号将列名包裹起来
model <- lm(`Conservation Status` ~ Latitude, data = data)
可以用一个简单的例子重现
data(iris)
lm(iris$epal.Length ~ iris$Species, iris)
model.frame.default(formula = iris$epal.Length ~ iris$Species, : 变量 'iris$epal.Length' 的无效类型 (NULL) 中的错误
并使用正确的语法
lm(Sepal.Length ~ Species, iris)
#Call:
#lm(formula = Sepal.Length ~ Species, data = iris)
#Coefficients:
# (Intercept) Speciesversicolor Speciesvirginica
# 5.006 0.930 1.582
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.