我在课程的上下文中学习R,我收到一条我不理解的错误信息。我从教师提供的文件中加载数据,以获取x
和y
:
> load("7.R.RData")
> ls()
[1] "x" "y"
现在我尝试适应OLS,但失败了:
> lm.fit(y ~ x)
Error in lm.fit(y ~ x) : 'x' must be a matrix
我不确定x
是什么。 class
告诉我它是“数字”并且打印其前十个值看起来像这样:
> class(x)
[1] "numeric"
> x[1:10]
[1] 140.1638 140.4303 140.9321 141.7705 140.0042 141.7460 141.8617 141.1520
天真地,我尝试将x
转换为矩阵,但这并没有改变任何东西:
> x = matrix(x)
> lm.fit(y ~ x)
Error in lm.fit(y ~ x) : 'x' must be a matrix
谷歌搜索此错误消息没有出现任何问题。
答案 0 :(得分:3)
好的,在输入问题时找到了它。习惯于scikit-learn,statsmodels和其他Python工具,我混淆了lm
和lm.fit
。后者是具有调用约定的低级拟合例程
lm.fit (x, y, offset = NULL, method = "qr", tol = 1e-7,
singular.ok = TRUE, ...)
因此,错误消息是抱怨第一个参数,公式,而不是我的x
。我应该用
lm(y ~ x)
答案 1 :(得分:0)
你总是可以使用lm.fit lm.fit(矩阵(X,长度(X),1),y)的 有时人们更喜欢调用lm.fit来提高性能。因为lm在内部调用lm.fit并且它会执行一些额外的jon,如果你想多次运行lm,这可能会非常耗时。