【问题标题】:Parameterized RMarkdown does not filter parameter in R参数化的 RMarkdown 不过滤 R 中的参数
【发布时间】:2021-06-28 19:27:35
【问题描述】:

我正在测试使用参数化的 RMarkdown,使用 c 作为参数。我正在使用Knit with parameters 选择ab,或者默认情况下选择a。 我希望获得 2 或 5 作为平均值,但我总是获得 3.5,这是全局平均值。 我在这里做错了什么?

---
title: "Parameterized RMarkdown"
output:
  html_document: default
params:
  c: "a"
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(knitr)
```


```{r mean, echo=FALSE}
df <- tibble(c = c("a", "a", "a", "b", "b", "b"),
             x = c(1, 2, 3, 4, 5, 6))
mean(df$x)
```

【问题讨论】:

  • Where are you filtering df$x 正在提取整列 'x'
  • 我认为使用参数过滤器。 c:“一个”
  • 您需要在代码中使用params$c。见bookdown.org/yihui/rmarkdown/params-use.html
  • 考虑使用df %&gt;% filter(c == params$c) %&gt;% summarise(x = mean(x))
  • (换个角度看这个……想想一个有点复杂的 rmarkdown 文档,它有几个数据集和几个参数。你相信shiny 知道你打算在哪里使用参数和在哪里不使用它?我使用参数作为一种在一个代码块中过滤/修改数据集的方法,然后在另一个代码块中我不使用参数。尽管shiny 的作者真的很聪明伙计们,我不知道如何正确推断参数打算使用什么以及在哪里使用。)

标签: r r-markdown parameterized


【解决方案1】:

我们可以在提取的“params”上添加filter,并获取“x”列的mean

library(dplyr)
df %>% 
    filter(c == params$c) %>%
    summarise(x = mean(x, na.rm = TRUE))

或使用base R 来执行此操作

with(df, mean(x[c == params$c], na.rm = TRUE))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多