【问题标题】:rmarkdown error with ggplot and pngggplot和png的rmarkdown错误
【发布时间】:2016-03-12 09:45:34
【问题描述】:

我曾尝试(徒劳)在 Rmarkdown 中使用 ggplot 生成图表。 代码如下:

```{r,echo=FALSE}
#fig.width=12,fig.height=6
panel2$PlotSize<-round(log(panel2$BSFA0200),0)- min(round(log(panel2$BSFA0200),0))+1# set size of dots
panel2$PlotSize[panel2$PlotSize==-Inf]<-NA
panel2$PlotColour<-ifelse(panel2$PlotSize<7,1,panel2$PlotSize)
panel2$PlotSize<-as.factor(panel2$PlotSize)
panel2$PlotColour<-as.factor(panel2$PlotColour)

g1<-ggplot(data=panel2,aes(x=NFR,y=PROF7*100,size=PlotSize,colour=PlotSize))+ geom_point()

g1

```

Out of knits 这工作正常,但是当在 Rmd 文件(html 或 pdf 格式)中执行时,我总是收到此错误消息

processing file: 1Profti_model.Rmd
  |..                                                               |   4%
  ordinary text without R code

  |.....                                                            |   8%
label: setup (with options) 
List of 1
 $ include: logi FALSE

  |........                                                         |  12%
  ordinary text without R code

  |..........                                                       |  15%
label: unnamed-chunk-1 (with options) 
List of 3
 $ echo   : logi FALSE
 $ warning: logi FALSE
 $ message: logi FALSE


Attaching package: 'dplyr'

The following objects are masked from 'package:stats':

    filter, lag

The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union

Loading required package: zoo

Attaching package: 'zoo'

The following objects are masked from 'package:base':

    as.Date, as.Date.numeric

  |............                                                     |  19%
   inline R code fragments

  |...............                                                  |  23%
label: unnamed-chunk-2 (with options) 
List of 1
 $ echo: logi FALSE

  |..................                                               |  27%
  ordinary text without R code

  |....................                                             |  31%
label: unnamed-chunk-3 (with options) 
List of 1
 $ echo: logi FALSE

Quitting from lines 98-109 (1Profti_model.Rmd) 
Error in png(..., res = dpi, units = "in") : unable to start png() device
Calls: <Anonymous> ... in_dir -> plot2dev -> do.call -> <Anonymous> -> png
In addition: Warning messages:
1: Removed 55 rows containing missing values (geom_point). 
2: In png(..., res = dpi, units = "in") :
  unable to open file '1Profti_model_files/figure-html/unnamed-chunk-3-1.png' for writing
3: In png(..., res = dpi, units = "in") : opening device failed

Execution halted

我还尝试通过将图表保存为 png 并随后将其加载为图片来解决此问题。也没有结果(见Error with loading png in Rmd file

感谢您的帮助

更新:

根据你们中的一些人的建议,我添加了一个不同的块名称,并在我的数据上复制了来自 Davit 的代码(请参阅更新的代码)。 不幸的是,错误仍然存​​在。有趣的是,knitr 无法编写 png,但可以在代码所在的同一文件夹中编写 csv(我对其进行了测试)。

最后,我测试了在我的 C 驱动器上运行这个完全相同的代码,并且(惊喜!)它可以工作。然而,这对我来说效率不是很高,因为我不想依赖特定的机器,我需要与其他人分享这项工作(所以网络驱动器是必须的)。此外,所有其他包/代码在网络驱动器中都可以正常工作,只有这个 png() 似乎是一个问题。

提前感谢您的帮助! --- 标题:新文件 作者:我 输出: html_document ---

```{r prova,echo=FALSE, results='asis', message = FALSE, error = FALSE, warning= FALSE}
#.libPaths("D:/xxxx/packages")
require(ggplot2)

 panel2 <- data.frame(BSFA0200 = rnorm(100),
                        NFR = rnorm(100),
                        PROF7 = rnorm(100))

panel2$PlotSize<-round(log(panel2$BSFA0200),0)- min(round(log(panel2$BSFA0200),0))+1# set size of dots
panel2$PlotSize[panel2$PlotSize==-Inf]<-NA
panel2$PlotColour<-ifelse(panel2$PlotSize<7,2,panel2$PlotSize)

write.csv(panel2[1:100,c('BSFA0200',"NFR","PROF7")],file="test.csv")

g1 <- ggplot(data = panel2,
             aes(x = NFR,
                 y = PROF7 * 100,
                 size = factor(PlotSize),
                 colour = factor(PlotSize)
                 ))

g1 + geom_point()

```

错误输出:

Loading required package: ggplot2

Quitting from lines 9-32 (test.Rmd) 
Error in png(..., res = dpi, units = "in") : unable to start png() device
Calls: <Anonymous> ... in_dir -> plot2dev -> do.call -> <Anonymous> -> png
In addition: Warning messages:
1: Removed 35 rows containing missing values (geom_point). 
2: In png(..., res = dpi, units = "in") :
  unable to open file 'test_files/figure-html/prova-1.png' for writing
3: In png(..., res = dpi, units = "in") : opening device failed
Execution halted

我的knitr版本是1.11(应该是最新的),R版本是3.2.2

> R.Version()
$platform
[1] "i386-w64-mingw32"

$arch
[1] "i386"

$os
[1] "mingw32"

$system
[1] "i386, mingw32"

$status
[1] ""

$major
[1] "3"

$minor
[1] "2.2"

$year
[1] "2015"

$month
[1] "08"

$day
[1] "14"

$`svn rev`
[1] "69053"

$language
[1] "R"

$version.string
[1] "R version 3.2.2 (2015-08-14)"

$nickname
[1] "Fire Safety"

【问题讨论】:

  • 在右侧的 rmarkdown 选项卡中有两个较小的选项卡,OutputIssues。它在问题下说了什么?你有什么样的文件权限?
  • 是不是特别是ggplot 导致了这个问题?你能编织一个基本情节吗?您可能没有对该文件夹的写入权限吗?
  • @rawr 问题中的消息是:png(...,res = dpi, units = "in") 中的错误:无法启动 png() 设备调用: .. .in_dir -> plot2dev -> do.call -> -> png。另外:警告消息:1:在png(...,res = dpi,units =“in”):无法打开文件'XXXX/figure-html/unnamed-chunk-3-1.png'进行写入。 2:在png(...,res = dpi,units =“in”):打开设备失败
  • @Axeman:确实,我通过 knitr 测试了在同一文件夹中读取和写入 csv 文件,它运行良好。此外,ggplot 代码在 knitr 中运行良好。
  • 我曾经遇到过类似的问题,结果证明是因为我试图写入的文件(在您的情况下为 unnamed-chunk-3-1.png)正在被另一个进程使用并被锁定。试试删除文件?尝试命名你的块(你添加一个这样的块标题:{r chunk_title,echo=FALSE}),看看问题是否来自文件名?

标签: r knitr r-markdown


【解决方案1】:

我也收到了这条消息。我的问题是文件路径太长。我的 R markdown 文件位于太多子文件夹中,并且我的 R markdown 文件的名称太长。一旦我减少了文件路径的长度,问题就解决了。我希望这对你有用。

【讨论】:

  • 我在使用渲染时也发现了这一点。我正在通过我的 smb 服务写入一条很长的路径,但它在写入 png 时失败了。当我切换到使用本地暂存目录时,它运行良好。
【解决方案2】:

我曾经遇到过同样的问题。下面的代码有效。您要么有错误的标头,要么没有调用包:很难说,因为您没有提供该信息。另外,请下次发布示例数据。

这是有效的完整代码(至少对我而言)。如果它不能在您的机器上运行,请发布您的数据和完整的 Rmd 脚本,我会尽力提供帮助。

---
title: New Document
author: Me
output:
  html_document
---

```{r,echo=FALSE, results='asis', message = FALSE, error = FALSE, warning= FALSE}
require(ggplot2)

panel2 <- data.frame(BSFA0200 = rnorm(100),
                      NFR = rnorm(100),
                      PROF7 = rnorm(100),
                      PlotSize = factor(rep(1:10, 10)),
                      PlotColour = factor(1:100))

g1 <- ggplot(data = panel2,
             aes(x = NFR,
                 y = PROF7 * 100,
                 size = PlotSize,
                 colour = PlotSize))

g1 + geom_point()
```

【讨论】:

    【解决方案3】:

    我也收到了这个错误;我通过移动代码以将有问题的图形生成到它自己的块中来解决它。

    【讨论】:

      【解决方案4】:

      我最近遇到了类似的问题。在我的情况下,问题是 antivirus 软件在尝试处理文件时阻止了 Rscript.exe,而未创建针织文件和 PNG 文件。因此,有时暂时禁用防病毒软件并检查是否能解决问题很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-26
        • 2014-11-05
        • 1970-01-01
        • 2021-08-04
        • 2020-09-20
        • 2016-10-27
        • 2014-10-12
        相关资源
        最近更新 更多