【问题标题】:R markdown Knitting to Pdf issue: r code results are different from the pdf outputR markdown Knitting to Pdf 问题:r 代码结果与 pdf 输出不同
【发布时间】:2019-11-12 22:14:07
【问题描述】:

这篇文章的标题是不言自明的,所以我不会浪费你的时间阅读这个问题。

我尝试清理 r 内存,重新启动我的笔记本电脑,删除 rmarkdown 文件,创建一个新文件,然后编织为 pdf。

结果还是一样:r代码输出与pdf输出不同。

---
title: "Mockup"
date: "`r format(Sys.time(), '%m/%d/%Y')`"
output: 
  pdf_document:
    fig_caption: yes
    fig_crop: no
    highlight: zenburn
    keep_tex: yes
    number_sections: false
    toc: yes
    toc_depth: 2
header-includes:
- \usepackage{example}
- \usepackage{nicematrix}
- \usepackage{hyperref}
- \usepackage{mathtools}
- \usepackage{amssymb}
- \usepackage{lettrine}
- \usepackage{amsmath}
- \usepackage{yfonts,color}
- \usepackage {titling}
- \usepackage{blkarray}
- \usepackage{fancyhdr}
- \pagestyle{fancy}
- \fancyhead[R,R]{Mockup}
- \fancyhead[L,L]{Mockup}
- \fancyfoot[C,C]{Mockup}
- \fancyfoot[L,R]{\thepage}
---

```{r setup, include=FALSE, message=FALSE}
library(knitr)
library("DAAG")
library(tree)
library(MASS)
knitr::opts_chunk$set(echo = TRUE, fig.pos= "h", comment = NA, tidy=TRUE, tidy.opts=list(width.cutoff=37))
data(spam7, data ="DAAG")
Spam <- spam7[,c("crl.tot","dollar","bang",
                 "money","n000","make","yesno")]
Spam$yesno <- as.factor(Spam$yesno)
attach(Spam)
set.seed(1234)
sample_size <- floor(0.8*nrow(Spam))
ind <- sample(seq_len(nrow(Spam)),size = sample_size)
Spam.training <- Spam[ind,]
Spam.test <- Spam[-ind,]
```

```{r,echo = FALSE}
q1.tree <- tree(yesno ~., data = Spam.training)
par(cex = .7)
plot(q1.tree)
text(q1.tree, pretty = 0)
```

R 代码输出(在 Rmarkdown 文件中): PDF输出:

关于如何解决这个问题的任何提示?

谢谢!

【问题讨论】:

  • 请提供minimal reproducible example。否则我们只能猜测。
  • 你想错了。为降价制作的文档不应依赖于您工作空间中的任何对象。处理数据时具体的是代码,而不是工作区中保存的临时对象。可能发生的情况是您将块选项设置为不保存它的值。这可能会有所帮助:github.com/rstudio/cheatsheets/raw/master/rmarkdown-2.0.pdf
  • 在这种情况下,我还想要更多的描述---如何结果不同?
  • 您的 yaml 标头中有任何内容吗?当您拨打rmarkdown::render 时,您使用了哪些选项? R 控制台上的结果和 PDF 输出中的结果到底有什么不同?
  • @AndréOliveira 我很好奇您指的是工作区中的哪些对象? OP 的示例似乎完全独立。

标签: r r-markdown


【解决方案1】:

sample 函数在 Rmd 和 PDF 中返回的 ind 不同。这两种情况我都使用了set.seed(4)

来自 Rmd:

> ind <- sample(seq_len(nrow(Spam)),size = sample_size)
> print(ind)
   [1] 2696   42 1351 1276 3741 1197 3329 4163 4359  336 3465 1313  460 4378 1907 2088 4453 2678 4410 3491 3274 4565 2319
  [24] 2243 2972 3802 2206 3851 2350 2423 2593 1092 4012 2990 2203 4434 2101 2840 1773   31 4280 1105 2579  825 4122  385
  [47] 4105 4061 3294 2572 1769 3394 4074 3680 3722 1915  804  790 4055 3377 2548  324 3875 4147 1023 2852  314 2335 3651
  [70] 4405 1554 2861 1858 1566 3735 3123 1451 1997 1185  603 4117 3206 2585 4143 4549  265  207 4464  929 4192  877  572
  [93] 2433 1228 1594  379 3449 2002  163 3158 1141 2834 1199 2395 2106 2583 3005  954 4384 3636 1237 1793 1304 2213 3396
 [116] 2291 1966 3547 4086  319  640 1761 3836 1184  424 3243 4388  898 2471 1545 1826  841 4472  821 3633 3938 3129 1234
 [139] 1929   58 2512 2992 1399 4225  753 1963 2547 4342 3406 1973 1584 4503 2643 4277 1124 3767  946 1235 2130 4591 4002
 [162] 4189 1844 1483 1255  321 4535  705  669 3334 4477 2709  890 2229 4510   13 2850 1067 4529 3164  446 2683  939 3953

...

来自 PDF

【讨论】:

  • 嗨,比尔,我在 r 代码和 PDF 中使用 set.seed(4) 时得到了相同的结果。但是当我使用 set.seed(1234) 时,问题又回来了。不过,我理解你的意思。
  • @JoMckenzie,你确定sed.seed(4) 解决了你的问题吗?我仔细检查过,它不适合我。我认为在渲染 pdf 时,系统使用不同的种子。无论如何,如果它对你有用,我很高兴!
  • 我所做的只是改变了几次种子(这很烦人,对不起)。首先,我将种子设置为 4,然后是 1200,然后是 1234,它起作用了……
猜你喜欢
  • 2018-11-19
  • 2018-09-18
  • 2017-10-15
  • 2017-04-25
  • 1970-01-01
  • 2021-04-21
  • 2021-11-18
  • 2017-10-30
  • 1970-01-01
相关资源
最近更新 更多