【问题标题】:Running code one line at a time breaks inline chunk output一次运行一行代码会中断内联块输出
【发布时间】:2017-05-08 06:36:30
【问题描述】:

当我运行完整的代码块时,内联输出会按预期显示。但是,如果我一次运行同一块一行,如果我使用多个绘图调用,它会中断。所以:

set.seed(129485)
x=1:10
y=rnorm(length(x), x, 1)
plot(x,y)
lines(x,y)

在 R 脚本中工作正常。如果我将它插入到一个全新的 R markdown 文件中的代码块中,如下所示:

---
title: "wtf"
author: "Drew Tyre"
date: "December 22, 2016"
output: html_document
---

```{r}
set.seed(129485)
x=1:10
y=rnorm(length(x), x, 1)
plot(x,y)
lines(x,y)
```

如果我使用 control-shift-enter、播放按钮或选择所有行并使用 control-enter 运行整个块,则该块运行。但是,如果我使用 control-enter 一次运行一行,它会在调用 lines(x,y) 时中断:

plot.xy(xy.coords(x, y), type = type, ...) 中的错误:尚未调用 plot.new

如果我在控制台中将选项设置为块输出,它就会消失。我想这可能是预期的行为,但是当使用内联输出时,也许 control-enter 应该与 control-shift-enter 做同样的事情?

我正在使用 RStudio 1.0.44 和

R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets
[6] methods   base

loaded via a namespace (and not attached):
[1] rsconnect_0.4.3 tools_3.3.2     yaml_2.1.14
[4] knitr_1.15.1

我也可以在这台机器上重现这种行为:

R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.2.3  knitr_1.12.3

【问题讨论】:

  • 如果您只是正常使用 R,而不是在 RMarkdown 文件中,是否会发生这种情况?
  • 线条是否被分成许多块?
  • 我在我的机器上试了一下,效果很好
  • @TARehman 仅在 RMarkdown 文件中,如介绍中所述
  • 我可以复制这个 - RStudio 1.0.44; Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.3.12 (KHTML, like Gecko); 3.3.2。我会说这可能最好作为一个潜在的错误发布到 RStudio 论坛。

标签: r rstudio


【解决方案1】:

RStudio 社区论坛上的 Kevin Ushey 给出了这个答案:

不幸的是,这是 Notebook 执行模型的结果。每次执行后图形设备状态都会重置,因此逐行执行的代码(例如填充绘图)将无法按预期工作。

有一些解决方法:

  1. 更喜欢一次执行整个块,例如使用Cmd + Shift + Enter,
  2. 将您的绘图生成代码括在括号 {} 中,
  3. 定义一个生成整个绘图的函数,
  4. 禁用该文档的内联块输出。 (通过单击源工具栏中的齿轮图标并选择“控制台中的块输出”来执行此操作)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2016-06-24
    • 1970-01-01
    相关资源
    最近更新 更多