【发布时间】: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 选项卡中有两个较小的选项卡,
Output和Issues。它在问题下说了什么?你有什么样的文件权限? -
是不是特别是
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