【问题标题】:Display subset of R output with knitR使用 knitR 显示 R 输出的子集
【发布时间】:2013-11-14 21:23:11
【问题描述】:

有没有办法用 knitR 只显示 R 输出的一部分?我想在投影仪演示文稿中仅显示来自 lm 模型的摘要输出的一部分,这样它就不会从幻灯片上消失。 (附带说明一下,为什么我的代码没有包装?)下面提供了一个最小示例。

\documentclass{beamer}
\begin{document}
\title{My talk}
\author{Me}
\maketitle
\begin{frame}[fragile, t]{Slide 1}
<<setup, include=FALSE, cache=FALSE, tidy=TRUE>>=
options(width=60, digits=5, show.signif.stars=FALSE)
@
<<mod1, tidy=TRUE>>==
data(cars)  # load data
g <- lm(dist ~ speed + I(speed^2) + I(speed^3), data = cars)
summary(g)
@
\end{frame}
\end{document}

具体来说,假设我只想返回以下输出:

Coefficients:
             Estimate Std. Error t value Pr(>|t|)
(Intercept) -19.50505   28.40530  -0.687    0.496
speed         6.80111    6.80113   1.000    0.323
I(speed^2)   -0.34966    0.49988  -0.699    0.488
I(speed^3)    0.01025    0.01130   0.907    0.369

Residual standard error: 15.2 on 46 degrees of freedom
Multiple R-squared:  0.6732,    Adjusted R-squared:  0.6519 
F-statistic: 31.58 on 3 and 46 DF,  p-value: 3.074e-11

【问题讨论】:

    标签: r formatting latex knitr


    【解决方案1】:

    可能有更好的方法来执行此操作,但以下内容应该适合您。它使用capture.output 选择要显示的打印输出部分:

    \documentclass{beamer}
    \begin{document}
    \title{My talk}
    \author{Me}
    \maketitle
    \begin{frame}[fragile, t]{Slide 1}
    <<setup, include=FALSE, cache=FALSE, tidy=TRUE>>=
    options(width=60, digits=5, show.signif.stars=FALSE)
    @
    <<mod1, tidy=TRUE>>==
    data(cars)  # load data
    g <- lm(dist ~ speed + I(speed^2) + I(speed^3), data = cars)
    tmp <- capture.output(summary(g))
    cat(tmp[9:length(tmp)], sep='\n')
    @
    \end{frame}
    \end{document}
    

    【讨论】:

    • 真棒托马斯。谢谢!
    • @jpfrench 如果您认为答案有帮助,请考虑投票或通过单击答案左侧的复选标记来接受它。
    • 我还不能投票,但我接受了答案。再次感谢!
    • @Yihui 首先,感谢您在开发knitR方面的辛勤工作并指出我的答案。此功能似乎是人们想要频繁且轻松地使用的功能。你有没有考虑在 >= 部分添加一些东西来做到这一点,有点像 eval=c(1, 3, 4)。您可以执行 >= 以获取输出的第 4 到第 6 行。
    • @jpfrench 是的,我想过,但我无法决定它是否应该是一个内置功能,因为这种方法仍然存在问题:当你有多个输出时块,out.lines=c(4:6) 应该是什么意思?它适用于第一个输出,最后一个还是全部?目前我倾向于让用户来决定。
    【解决方案2】:

    这里调用的summary.lm() 方法返回一个相关输出的列表,该列表用print.summary.lm 很好地格式化。如果您想要列表的单个组件,请尝试使用双括号:

    输入:

    summary(g)[[4]]
    summary(g)[[6]]
    summary(g)[[7]]
    summary(g)[[8]]
    

    输出:

    > summary(g)[[4]]
                    Estimate  Std. Error    t value  Pr(>|t|)
    (Intercept) -19.50504910 28.40530273 -0.6866693 0.4957383
    speed         6.80110597  6.80113480  0.9999958 0.3225441
    I(speed^2)   -0.34965781  0.49988277 -0.6994796 0.4877745
    I(speed^3)    0.01025205  0.01129813  0.9074113 0.3689186
    > summary(g)[[6]]
    [1] 15.20466
    > summary(g)[[7]]
    [1]  4 46  4
    > summary(g)[[8]]
    [1] 0.6731808
    

    不过,必须有更好的方法将摘要方法的优点与列表索引结合起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-07
      • 2022-08-07
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多