【问题标题】:How to Fix "Variable Lengths Differ" Error in r When Doing a Linear Regression进行线性回归时如何修复 r 中的“可变长度不同”错误
【发布时间】:2016-08-25 03:23:34
【问题描述】:

我正在尝试创建一个 for 循环,该循环遍历我的数据框并针对 AcquisitionTime 运行所有列的线性回归,这是一个双精度。所有列的长度相同。最终,我只想使用其中一个应用函数而不是 for 循环来执行此操作,但我对 r 真的很陌生,应用函数对我来说没有意义。

##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 不存在于数据框中,要么是因为我的数据中某处存在相同的变量名。到目前为止我还没有找到。

【问题讨论】:

  • @ZheyuanLi 好的,我去编辑一下。
  • 太棒了,谢谢@Chriscross 我们实际上鼓励您使用dput() 来共享数据而不是链接,但这次不要担心。
  • 我能看到的一个问题是:lm(i ~ AcquisitionTimes, data = raw_data)。这不起作用的原因是因为i 在这里是一个字符串,与公式其余部分的格式不同。您可以通过以下方式解决此问题:lm(paste(i, "~ AcquisitionTimes"), data = raw_data)
  • 我认为你不能只在公式中使用i 来循环遍历。公式使用非标准评估,因此它将 i 字面上作为一个名为 i 的变量,而不是循环通过你的 i 作为循环变量。

标签: r for-loop apply lm


【解决方案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)

【讨论】:

  • 我发现这适用于lm() 函数,但在另一种情况下,我使用来自rdocumentation.org/packages/estimatr/versions/0.30.2/topics/…lm_lin() 函数在这种情况下,使用粘贴方法,我得到一个新错误:Error: 'x' must be a formula 关于如何解决这种类似用例的任何想法?
  • @alxlvt,请改用lm_lin(as.formula(paste(i, "~ AcquisitionTimes")), ...)。在这种情况下,我将粘贴包装在 as.formula 中,以确保将其作为公式传递给 lm_lin 函数
猜你喜欢
  • 2016-09-24
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2019-10-10
相关资源
最近更新 更多