Pra*_*r-M 15 ubuntu windows pdf
当我在 中处理图表时R,我尝试将它们直接输出到 PDF 中。例如,用于创建图形的代码如下。
library(ggplot2)
levels_fp = ggplot(data=df_forest_2,
aes(x = levels,y=center, ymin=lower, ymax=upper))+
geom_pointrange(aes(col=levels))+
geom_hline(aes(fill=levels),yintercept =1, linetype=2)+
xlab('Outcomes Evaluated')+ geom_errorbar(aes(ymin=lower, ymax=upper,col=levels),width=0.2,cex=1)+
facet_wrap(~outcome,strip.position="top",nrow=1,scales = "free_x") + theme(
axis.title = element_text(size = 18),
axis.text = element_text(size = 14),
legend.text = element_text(size = 16),
legend.title = element_text(size = 16),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black"),
legend.box.background = element_rect(),axis.text.x = element_blank(), strip.text.x = element_text(size = 14)
) + ylab("Odds Ratio")+labs(col="Interventions")
pdf(file="Forest_levels_2.pdf", width=12,height =12 )
levels_fp
dev.off()
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是:假设我已经在 PDF 查看器中打开了 pdf(我从上一步输出,即Forest_levels_2.pdf)。然后,如果我再次运行代码,文件会得到输出并覆盖以前的 PDF,并且 PDF 查看器中的输出也会立即更改。
但是,如果我尝试在 Windows 中执行相同操作,即我已使用 PDF 查看器打开 PDF,然后尝试运行代码,则会出现以下错误 -->无法访问 pdf。为什么 Linux 中的行为有所不同(我使用的是 Ubuntu 20.04)?
添加 Windows 错误的输出
Error in pdf(file = "Forest_levels_2.pdf", width = 12, height = 12) :
cannot open file 'Forest_levels_2.pdf'
Run Code Online (Sandbox Code Playgroud)
为了删除一些变量,我尝试下载适用于Windows的Evince PDF查看器(Evince 2.32),然后在Windows中使用Evince打开PDF并再次进行相同的实验。
猜猜发生了什么!?!
我能够在 Windows 中成功修改打开的 PDF。Evince 在 Ubuntu 和 Windows 中的工作方式相同。所以可能,它也更依赖于 PDF 查看器的属性。
Ste*_*art 40
这是您使用的 PDF 查看器的功能。
我怀疑,PDF 查看器打开文件,然后读取/处理内容。它不必关闭文件,但可能会关闭。
接下来,它会设置一个inotify,这意味着如果有人写入文件,您的 PDF 查看器将收到通知。
当您写入文件时,您的 PDF 查看器收到一个信号,表明它正在查看的文件已更改。这使 PDF 查看器有机会重新阅读文件并重新处理内容。
类似的东西在 Windows 中是可能的,但您使用的 PDF 查看器根本没有实现。当您的 Windows PDF 查看器打开 PDF 时,默认情况下它会获得对 PDF 文件的独占访问权限,这将导致另一个程序在尝试打开文件进行写入时出错。查看器必须进行系统调用以明确放弃独占访问,以便以与 linux 版本类似的方式进行操作。
Windows 从 MS-DOS 系统继承了共享访问控制的语义,其中共享是在 MS-DOS 3.3 中引入的。因此,应用程序在打开文件时必须明确允许共享;否则,它在关闭之前对文件具有独占读取、写入和删除访问权限(允许其他类型的访问,例如检索文件属性的访问。)
它还说:
类 Unix 操作系统(包括 Linux 和 Apple 的 macOS)通常不会自动锁定打开的文件。