首页 > 解决方案 > rmarkdown data.table 编译后绘图不匹配

问题描述

我到处寻找答案,但我不确定这是否是一个错误,但我还没有发现任何远程类似的问题,所以就到这里。

我(相对)data.table是 R 库的新手,但它能够轻松地将内容应用于选择性查询而无需为所有内容创建函数,这让我在我第一次使用它的那一刻就卖掉了。

我使用 rmarkdown 编译报告,并且一直在j运行DT[i, j, by]. 这在 Rstudio 中运行顺利,编辑器按照预期的方式执行我的代码,但是在我编译输出的那一刻,绘图不再符合我想要的(和看到的)!

我已经多次清理并重新启动了我的 Rsession,所以我知道这个问题不是由于我的 R 环境造成的。更奇怪的是,当我实际打印j代码中的数据时,它们在输出和编辑器中都是相同的,所以plot真的是那个搞砸了......

这是说明我的问题的 Rmd 代码:

---
title: "data.table plot issue"
author: "Anyone"
date: "27 juin 2018"
output: html_document
---

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

## Building data

```{r}
library(data.table)

tab = data.table(varA = rep(1:4, each=5),
                 varB = rep(1:5, 4),
                 varC = rep(LETTERS[1:4], each=5),
                 varD = rep(c("red", "blue", "green", "hotpink"), each=5))
tab
```

```{r results="hold"}
layout(matrix(1:4, nrow = 2, byrow = T))
a = tab[,{

  print(varA)
  print(varB)
  print(varC)
  print(varD)

  plot(varB, varA, col=varD, ylim=c(0,5), pch=16, main=varC)

  }, by=varC ]
```

这就是我在 Rstudio 中得到的(这是我应该得到的): 在此处输入图像描述 在此处输入图像描述

但是,是我编译后得到的:

在此处输入图像描述

打印的变量是正确的,所以我不知道这里有什么问题。我认为它与 Rmarkdown 编译以及它处理绘图的方式有关,但我没有太多事情要做。

有任何想法吗 ?


编辑 :

版本信息 :

标签: rdata.tabler-markdown

解决方案


您可以通过包围颜色来强制颜色paste0

layout(matrix(1:4, nrow = 2, byrow = T))
a = tab[,{

  print(varA)
  print(varB)
  print(varC)
  print(varD)
  plot(varB, varA, col=paste0(varD), ylim=c(0,5), pch=16, main=varC)
  }, by=varC ]

在此处输入图像描述


推荐阅读