【问题标题】:Elegant way to embed statistic contingently in r markdown/notebook [r]将统计数据随机嵌入 r markdown/notebook [r] 的优雅方式
【发布时间】:2018-03-06 11:31:47
【问题描述】:

我想根据 if 测试是否通过,在 rMarkdown/notebook 中嵌入统计信息。

我没有在 SO 中找到解决此问题的问题,但如果我忽略了它,我深表歉意。

基于this link,我发现了如何使用 if 语句来确定输入的文本,我可以简单地这样做:

``` {r}
this_p_value = .03


```
`r if(this_p_value<.05){"this is significant"} else {"this is not significant"}`

如果我想报告 p 值,我可以这样做:

this_p_value is a significant as p= `r this_p_value`

我的答案显示了您如何做到这两点,但我想可能有比我发布的解决方案更优雅的方法(或至少有几个替代方案)。如果我忽略了解决此问题的 SO 问题,再次道歉。

【问题讨论】:

  • 你看this的帖子了吗?
  • @ erocoar - 那篇文章是我获得 if 语句的方式,但它似乎并没有促进将 r 定义的变量嵌入到输出中。我已经编辑了我的问题以突出显示该问题。

标签: r r-markdown rnotebook


【解决方案1】:

我玩过但从未完全开发过的东西是一组函数,可以使这些类型的结构在 Markdown 中更易于管理。在这种情况下,toggle_text

toggle_text <- function(condition, true, false)
{
  coll <- checkmate::makeAssertCollection()

  checkmate::assert_logical(x = condition,
                            len = 1,
                            add = coll)

  checkmate::assert_character(x = true,
                              len = 1,
                              add = coll)

  checkmate::assert_character(x = false,
                              len = 1,
                              add = coll)

  checkmate::reportAssertions(coll)

  if (condition) true
  else false
}

可以用作

---
title: "Untitled"
output: html_document
---

```{r}
install.packages("checkmate") #comment out if installed
library(checkmate)

toggle_text <- function(condition, true, false)
{
  coll <- checkmate::makeAssertCollection()

  checkmate::assert_logical(x = condition,
                            len = 1,
                            add = coll)

  checkmate::assert_character(x = true,
                              len = 1,
                              add = coll)

  checkmate::assert_character(x = false,
                              len = 1,
                              add = coll)

  checkmate::reportAssertions(coll)

  if (condition) true
  else false
}

this_p_value = 0.03
```

This is `r toggle_text(this_p_value <= 0.05, "", "not")` significant as p = `r this_p_value`.


```{r}
this_p_value = 0.07
```

This is `r toggle_text(this_p_value <= 0.05, "", "not")` significant as p = `r this_p_value`.

【讨论】:

  • 一旦你加载了这个函数,我可以想象这使得手稿比我使用粘贴更容易阅读。
  • 我确信有一些方法可以使用空白使其更具可读性,但我实际上还没有充分利用它来积累任何经验。
  • 当我尝试运行它时,我需要安装包“checkmate”,因此编辑了您的代码以包含它。但它已经很好地工作了!
  • 实际上,抱歉,我想我遗漏了一些东西。您的函数何时会比 if([test]){ [output 1] }else{ [output 2] } 更优化?我不是说不是,只是觉得我还不明白为什么。
  • 不是。它是一个模板,用于简化创建代码的过程。并且最适合包含短字符串。如果您希望包含更长的字符串(段落),这可能不是正确的方法。我只是发现 toggle_text 比原始的 if else 结构更能描述我的目标。
【解决方案2】:

所以我在写这个问题时想到的解决方案是:

``` {r}
this_p_value = .03

```

`r if(this_p_value<.05){paste(" this is significant as p=",this_p_value,". [Rest of writeup here]",sep='')} else {"this is not significant"}`

但是使用“粘贴”的任何替代方法?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 2018-01-12
    • 2023-04-02
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多