【问题标题】:R misunderstanding lapply computation/output sequence?R误解 lapply 计算/输出序列?
【发布时间】:2017-04-28 06:52:50
【问题描述】:

我创建了以下 lapply 命令来从因变量列表中计算多个回归模型。

lapply(1:length(regressionVars$motivation_on), function(x) {
   print("printing regression model for DV: " %p%  regressionVars$motivation_on[x])
   OLS_ONM_motivation_X <- lm(regressionVars$motivation_on[x] %p% " ~ " %p% "age + gender" %p% " + " %p% paste(c(regressionVars$pvq), sep = "", collapse = " + "), comb)
   summary(OLS_ONM_motivation_X)
})

渲染 R 文件时得到的输出如下所示:

但我真正想要的是这个序列:

  • 打印(标题1)
  • 总结(lm1)
  • 打印(标题2)
  • 摘要(标题2)
  • 等等……

我也尝试了一个 for 循环,但它只打印了 21 次“标题”并且不计算线性模型...

for (x in 1:length(regressionVars$motivation_on)) {
   print("printing regression model for DV: " %p%  regressionVars$motivation_on[x])
   OLS_ONM_motivation_X <- lm(regressionVars$motivation_on[x] %p% " ~ " %p% "age + gender" %p% " + " %p% paste(c(regressionVars$pvq), sep = "", collapse = " + "), comb)
   summary(OLS_ONM_motivation_X)
}

我做错了什么?我怎样才能实现我想要的?谁能给这篇文章起个更好的标题?

【问题讨论】:

  • 请提供一个可重现的例子。
  • @AdamQuek 只需在 R 中获取任何集合并按照 OP 的操作进行迭代...您会看到摘要统计信息总是出现在最后,迭代之后已完成。
  • 请注意,在许多情况下,summary() 还会显示正在迭代的值的表示形式,在这种情况下,您的问题尚无定论。

标签: r for-loop lapply


【解决方案1】:

如果最后一行计算某个对象,R 函数会隐式返回。因此摘要是从函数返回而不是打印出来的。我相信你能做到

print(summary(x))

而不是获得所需的结果,否则执行打印并将 return(TRUE) 添加到下一行或其他内容以逃避 R 的自动返回捕获。

试试

invisible(lapply(1:length(regressionVars$motivation_on), function(x) {
   print("printing regression model for DV: " %p%  regressionVars$motivation_on[x])
   OLS_ONM_motivation_X <- lm(regressionVars$motivation_on[x] %p% " ~ " %p% "age + gender" %p% " + " %p% paste(c(regressionVars$pvq), sep = "", collapse = " + "), comb)
   print(summary(OLS_ONM_motivation_X))
}))

【讨论】:

  • 根据我在本地的测试,这似乎不起作用。
  • 这对我来说似乎工作得很好:lapply(1:5, function(x) { print(x); print(summary(x)) } 据我所知,打印完全按照问题中要求的顺序。如果您想避免返回结果的最终打印输出,请将整个结果用invisible() 包裹起来。
  • 不...您的摘要都打印在底部...仔细阅读输出
  • 这是对lapply的滥用。如果他们不想要返回值,他们应该使用for 循环。
  • @Roland 如果使用for 循环解决了summary 出现不合适的问题,那么将其作为答案发布。
猜你喜欢
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 2018-07-28
  • 1970-01-01
相关资源
最近更新 更多