我可以在 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 中添加了评论。
我使用了与上面相同的 YAML。
我更新了 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]+|<chr>|<dbl>|<int>|<fct>|<num>/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(/<NA>/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("<chr>") > -1) {
str = str.replace(/<chr>/g, '<i style="color:gray;"><chr></i>');
}
if (colors.indexOf("<dbl>") > -1) {
str = str.replace(/<dbl>/g, '<i style="color:gray;"><dbl></i>');
}
if (colors.indexOf("<int>") > -1) {
str = str.replace(/<int>/g, '<i style="color:gray;"><int></i>');
}
if (colors.indexOf("<fct>") > -1) {
str = str.replace(/<fct>/g, '<i style="color:gray;"><fct></i>');
}
if (colors.indexOf("<num>") > -1) {
str = str.replace(/<num>/g, '<i style="color:gray;"><num></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)
```
如果我在 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 中添加了评论。
我使用了与上面相同的 YAML。
我更新了
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]+|<chr>|<dbl>|<int>|<fct>|<num>/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(/<NA>/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("<chr>") > -1) {
str = str.replace(/<chr>/g, '<i style="color:gray;"><chr></i>');
}
if (colors.indexOf("<dbl>") > -1) {
str = str.replace(/<dbl>/g, '<i style="color:gray;"><dbl></i>');
}
if (colors.indexOf("<int>") > -1) {
str = str.replace(/<int>/g, '<i style="color:gray;"><int></i>');
}
if (colors.indexOf("<fct>") > -1) {
str = str.replace(/<fct>/g, '<i style="color:gray;"><fct></i>');
}
if (colors.indexOf("<num>") > -1) {
str = str.replace(/<num>/g, '<i style="color:gray;"><num></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)
```