【问题标题】:inline dplyr in R MarkdownR Markdown 中的内联 dplyr
【发布时间】:2016-09-17 15:14:35
【问题描述】:

我希望将一些 R 代码内联到我正在写的一篇文章中。以下是好的:

The quick brown fox jumped over \`r 2+2\` lazy dogs

敏捷的棕狐跳过了 4 条懒狗

但是当我尝试将 dplyr 与以下数据框结合使用时:

structure(list(name = structure(c(2L, 1L, 3L), .Label = c("Cat", 
"Dog", "Horse"), class = "factor"), n = c(4L, 3L, 8L)), .Names = c("name", 
"n"), class = "data.frame", row.names = c(NA, -3L))

它坏了:

The quick brown fox jumped over \`r as.numeric(temp %>% filter(name=="dog") %>% select(n)\` lazy dogs

Quitting from lines 80-81 (QuickBrown.Rmd)
Error in base::parse(text = code, keep.source = FALSE) : 
 <text>:2:0: unexpected end of input
1: as.numeric(temp %>% filter(name=="Dog") %>% select(
   ^

尝试使用块对象让我更接近,尤其是使用 results="asis":

The quick brown fox jumped over 
```{r results="asis", echo=FALSE}
df <- as.numeric(temp %>% filter(name=="Dog") %>% select(n))
print(df[,1][[1]])
```
lazy dogs

敏捷的棕狐跳过[1] 4条懒狗

但我不知道如何摆脱索引号 [1]。我怎样才能最好地将 dplyr 结果与 R Markdown 内联或使用块,我怎样才能摆脱索引号?

【问题讨论】:

  • 您可以使用cat 函数代替print。另一种选择是使用块选项创建一个变量n,然后像The quick brown fox jumped over 'r n' lazy dogs 一样内联调用n
  • 啊,cat 工作,谢谢。我认为内联 dplyer 是不可能的: The quick brown fox jumped over `r cat(as.numeric(temp %>% filter(name=="dog") %>% select(n))` 懒狗仍然休息

标签: r dplyr r-markdown


【解决方案1】:

我会试试的

```{r, echo=FALSE}
library(magrittr) # for %$% extraction
x <- temp %>% filter(name=="Dog") %>% slice(1) %$% n)
```

敏捷的棕狐跳过`r x`懒狗


但您也可以使用 dplyr 内联。我测试成功了:

---
title: "test"
output: html_document
---

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

## R Markdown

here's a `r mtcars %>% slice(1) %$% gear` test with dplyr.

【讨论】:

  • 谢谢,这行得通。我以前从未见过 %$%,它有什么作用?我的新代码:快速的棕色狐狸跳过了 `r temp %>% filter(name=="Dog") %$% n` lazy dogs
  • @pluke, %$% 用于从管道中的 data.frame 中提取原子向量(并且(向量)是您想要在内联代码中使用的内容)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多