如何修复"可变长度不同"执行线性回归时r中的错误

时间:2016-08-25 03:23:35

标签: r for-loop apply lm

我试图创建一个循环遍历我的数据框的for循环,并针对AcquisitionTime运行所有列的线性回归,这是一个双精度数。所有列的长度都相同。最后我想使用一个apply函数而不是for循环来做这个但是我真的很新,并且apply函数对我没有意义。

##pdf("ROIs_vs_AcquisitionTime_lm.pdf")
x = 0
for (i in names(raw_data)){
  if(x > 9){
    fit <- lm(i ~ AcquisitionTimes, data = raw_data)
    ##print(ggplotRegression(fit))
  }
  x <- x + 1
}
##dev.off()

当我运行此代码时,我收到此错误:

Error in model.frame.default(formula = i ~ AcquisitionTimes, data = raw_data,:  
variable lengths differ (found for 'AcquisitionTimes')

导致此错误的原因是什么?我查看是否有任何其他名为raw_data的数据框,但我没有。我甚至清除了R中的对象,看看是否有帮助。我读到的每个地方都说这是因为变量AcquisitionTimes在数据框中不存在,或者因为我的数据中某处存在相同的变量名。到目前为止,我还没找到。

1 个答案:

答案 0 :(得分:1)

我已经在评论中提到了修复,但以下简单示例可以重现您的错误:

data(iris)
i = "Sepal.Length"
lm(i ~ Sepal.Width, data = iris)

你会看到

Error in model.frame.default(formula = i ~ Sepal.Width, data = iris, drop.unused.levels = TRUE) : 
variable lengths differ (found for 'Sepal.Width')

要纠正这个问题,我们可以改为:

lm(paste(i , "~ Sepal.Width"), data = iris)

按预期工作:

Call:
lm(formula = paste(i, "~ Sepal.Width"), data = iris)

Coefficients:
(Intercept)  Sepal.Width  
     6.5262      -0.2234

在你的情况下,它将是

lm(paste(i, "~ AcquisitionTimes"), data = raw_data)