无法提取模型摘要统计信息

时间:2014-05-20 12:27:28

标签: r list

我在从R。

中提取一些模型摘要统计信息时遇到了一些麻烦

例如,让我们使用iris数据集。

data(iris)
model1 <- summary(lm(Sepal.Length~Sepal.Width,data=iris))

我想从摘要统计信息中提取r.squaredadj.r.squared

lapply(model1, "[", c("r.squared", "adj.r.squared"))
Error in terms.formula(newformula, specials = names(attr(termobj, "specials"))) : 
  invalid model formula in ExtractVars

我很困惑,因为以下似乎工作正常:

model1[c('r.squared', 'adj.r.squared')]
# $r.squared
# [1] 0.01382265
# 
# $adj.r.squared
# [1] 0.007159294

有人理解这个错误吗?非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:3)

此处不需要lapplystr(model1)告诉我们model1是包含

的11个元素的列表
> names(model1)
#  [1] "call"          "terms"         "residuals"     "coefficients"  
#  [5] "aliased"       "sigma"         "df"            "r.squared" 
#  [9] "adj.r.squared" "fstatistic"    "cov.unscaled" 

可以使用c(model1)查看整个列表。可以使用

直接访问r平方值
> model1[c('r.squared', 'adj.r.squared')]
# $r.squared
# [1] 0.01382265

# $adj.r.squared
# [1] 0.007159294

或使用正则表达式捕获两个r平方值

> model1[grepl('squared', names(model1))]
# $r.squared
# [1] 0.01382265

# $adj.r.squared
# [1] 0.007159294

答案 1 :(得分:0)

@RichardScriven的替代方案,如果你真的想使用lapply(也许是因为这是类似测试的推广):你已经交换了参数。

您正尝试从一次运行中迭代模型统计信息列表并获取两个元素。例如,如果:

a <- list(x=1, y=2, z=3)

然后lapply(a, [, c('x', 'y'))将首先展开到a[1][ c('x', 'y') ]然后a[2][ c('x', 'y') ],最后展开a[3][ c('x', 'y') ],而不是(我认为)你想要的。 1

你可以选择两种方式。

  1. 尝试lapply( c('x', 'y'), function(i) a[[i]])(或sapply,就此而言)。不过,这可能有点尴尬,因为它首先没有优于a[ c('x', 'y') ]的优势。

  2. 如果您打算从多次运行中获取模型统计信息,并且只是尝试使用一组统计信息,请尝试:

    lapply(list(a),`[`,c('x','y'))

    list(a)替换为可能由modellist形成的modellist <- list(model1, model2, model3)(或更合适地,返回不同的*apply函数。

  3. PS:
    1 如果你尝试它,它不会完全 - 输出不匹配 - 但概念上我是如何设想正在发生的事情。< / p>

相关问题