【问题标题】:head() function does not work within 'for' loop?head() 函数在“for”循环中不起作用?
【发布时间】:2013-02-20 18:53:56
【问题描述】:

我尝试使用 for 循环打印出几行。这是代码。 奇怪的是它不适用于 head() 函数。如果我将head() 替换为print(),它会起作用。

kw_id=c('a','b')
keyword_text=data.frame(col=c('a','b'), col2=c(1,2), row.names=(c('r1','r2')))

for (i in 1:2) { 
   plot_data<-subset(keyword_text,col==kw_id[i])
   print(plot_data)
   head(plot_data)
}

有人可以帮忙吗?我怀疑它与head() 函数有关。

【问题讨论】:

  • 试试print(head(plot_data))
  • @Arun -- 你是对的,当然,但你知道为什么对象不会像 REPL 中那样在for 循环中打印吗?还是“就是这样”?
  • @JoshO'Brien,直到你问我才考虑过。我猜约书亚准确地回答了这个问题。

标签: r for-loop


【解决方案1】:

这是 R 新手遇到的相对常见的一类问题。这里的问题是 R 服务于两个情妇:交互式控制台工作和“真正的编程”。

当您在控制台键入返回值的命令时,控制台自动调用打印方法以显示结果。运行脚本时,除非您告诉它,否则不会发生这种情况。

因此,如果您将其更改为 print(head(plot_data)),它应该可以工作。

这些在常见问题解答7.167.22 中进行了讨论

来自 cmets 的附录:

正如 Josh 指出的,将 for 循环直接复制粘贴到控制台也无法打印任何输出。在这种情况下发生的事情是 for 循环(就像 R 中的大多数东西一样)实际上是一个函数,它的返回值 (NULL) 以不可见的方式返回,这意味着没有打印。 (这在?Control中有提及。)

【讨论】:

  • 但是即使它被复制到控制台中,for 循环也不会自动打印...似乎其他/其他一些设计决策在起作用(?)可能只是很好避免为迭代多次的循环喷出printed 输出页面。
  • @JoshO'Brien 嗯。在评估 for 循环函数的地方发生了什么事,最后一条语句自动包装在 invisible 之类的东西中? (我的意思不是字面意思,只是不知何故 for 循环“函数”没有返回值。)
  • @JoshO'Brien 是的。这几乎可以肯定是因为for(和其他人)不可见地返回 NULL。
  • @JoshO'Brien:这种自动打印(实际上我相信,使用了show)只发生在命令行的最上层(以及browser)。相关问题在 FAQ 7.16 (cran.r-project.org/doc/FAQ/…) 和 7.22 中讨论。
  • Joran -- 你的答案写得很漂亮,但我认为真正的解释在你的评论中:这与运行脚本没有太大关系,但与 for 的一切有关返回值。感谢您澄清这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多