我可以在 Rmarkdown / xaringan 中打印 tibbles,使它们看起来像 RStudio 控制台吗

Can I print tibbles in Rmarkdown / xaringan so they look like the RStudio console

如果我在 RStudio IDE 中使用控制台打印小标题,则 NA 值显示为红色。当我在 xaringan 幻灯片上打印 table 时,table 是黑白的,NA_character_ 值显示为 <NA>。有没有办法让 xaringan 幻灯片上的输出看起来像控制台输出(不使用屏幕截图)?

这是一个例子:

---
title: "x"
output:
  xaringan::moon_reader
---


```{r}
library(tibble)
example <- tribble(
  ~name, ~age,
  "Fran", 2,
  "Bob", NA,
  NA, NA
)
example
```

我试图解释“我不知道我不知道什么”关于你的 R Markdown 脚本在哪里下线(当你添加更多内容时)。除了查找编码的负数之外,这还适用于您在此处拥有的内容。

我有单独调用的样式。如果你想 update/change 这些样式,你应该能够从这里的写法中看到更改样式的内容和位置。我也在 Javascript 中添加了评论。

  1. 我使用了与上面相同的 YAML。

  2. 我更新了 example 以便它包含一个负数。这样你就可以看到负数也会改变颜色。

    library(tibble)
    example <- tribble(
      ~name, ~age,
      "Fran", 2,
      "Bob", NA,
      NA, NA,
      "George", -1
    )
    example
    

将此块添加到 R Markdown 脚本文件中的任何位置。

```{r doAsYouAreTold,results="asis",echo=FALSE,engine="js"}
// var str = text.innerHTML,
// reg = /red|blue|green|orange/ig; //g is to replace all occurrences

text = document.querySelectorAll("pre>code.remark-code:not(.hljs)>div.remark-code-line");

for (i = 0; i < text.length; ++i) {
  str = text[i].innerHTML,
  reg = /NA|##|-[0-9]+|&lt;chr&gt;|&lt;dbl&gt;|&lt;int&gt;|&lt;fct&gt;|&lt;num&gt;/ig; 
        //g is to replace all occurrences
   // fix the structure
  toStr = String(reg);
  color = (toStr.replace('\/g', '|')).substring(1);

  //split the list
  colors = color.split("|");
  
  //remove the <> around NA
  str = str.replace(/&lt;NA&gt;/g, 'NA  '); // added whitespace to keep spacing even
  
  //remove the ## preceding each code line
  str = str.replace(/##/g, '');
  
  // look for negative numbers - make them dark red
  if(colors.indexOf("-[0-9]+") > -1) {
    str = str.replace(/(-[0-9]+)/g, '<span style="color:darkred;"></span>');
  }
  
  // look for NA - make them dark red
  if (colors.indexOf("NA") > -1) {
    str = str.replace(/NA/g, '<span style="color:darkred;">NA</span>');
  }
  
  // look for field types - make them italicized and the color gray
  if (colors.indexOf("&lt;chr&gt;") > -1) {
    str = str.replace(/&lt;chr&gt;/g, '<i style="color:gray;">&lt;chr&gt;</i>');
  }
  if (colors.indexOf("&lt;dbl&gt;") > -1) {
    str = str.replace(/&lt;dbl&gt;/g, '<i style="color:gray;">&lt;dbl&gt;</i>');
  }
  if (colors.indexOf("&lt;int&gt;") > -1) {
    str = str.replace(/&lt;int&gt;/g, '<i style="color:gray;">&lt;int&gt;</i>');
  }
  if (colors.indexOf("&lt;fct&gt;") > -1) {
    str = str.replace(/&lt;fct&gt;/g, '<i style="color:gray;">&lt;fct&gt;</i>');
  }
  if (colors.indexOf("&lt;num&gt;") > -1) {
    str = str.replace(/&lt;num&gt;/g, '<i style="color:gray;">&lt;num&gt;</i>');
  }
  
  // replace the updated content of str
  text[i].innerHTML = str;
}

// look for A tibble (A tsibble.. A ... anything else that could land here)
// make the text gray
text2 = document.querySelectorAll("pre>code.remark-code>div.remark-code-line:First-child");
for(j = 0; j < text2.length; ++j) {
  if(text2[j].innerText.includes("# A")) {
    str2 = text2[j].innerHTML
    text2[j].innerHTML = '<span style="color:gray;">'+str2+'</span>';
  }
}

```

添加 Javascript 块之前和之后

这可以通过 fansi 包获得,该包提供 knitr 钩子,用于在 rmarkdown 中将 crayon 输出渲染到 HTML。小插图 here.

中有更多信息
```{r setup, echo = FALSE, results='asis'}

options(crayon.enabled = TRUE)

old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks)

```

```{r}

tibble::tribble(
  ~name, ~age,
  "Fran", 2,
  "Bob", NA,
  NA, NA
)

waldo::compare(1:5, 3:7)

```