gpt4 book ai didi

r - 确定 ghostscript 版本

转载 作者:行者123 更新时间:2023-12-01 12:47:41 24 4
gpt4 key购买 nike

我曾经写过一篇关于将 graphis 与外部程序结合的博客,并收到了一位读者 ( -click here- ) 关于完全在 R 中使用 ghostscript 实现这一点的精彩评论,如下所示。我最近一直在使用这个,我想与其他人分享。我想修改它以使功能更直观,检测 ghostscript 类型是我想做但不能做的一种模式。通过 .Platform 可以轻松了解 Unix 与 Windows .症结在于 Windows 32 与 64 之间的挣扎。

如何使用 R 检测正在运行的 ghostscript 版本(gswin32c 或 gswin64c)?仅查看计算机的规范还不够好,因为我在 Win 64 计算机上运行 gswin32c。这个想法是完全删除 os 参数或将其设置为 NULL并让函数尝试访问此信息。

mergePDF <- function(infiles, outfile, os = "UNIX") {
version <- switch(os,
UNIX = "gs",
Win32 = "gswin32c",
Win64 = "gswin64c")
pre = " -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="
system(paste(paste(version, pre, outfile, sep = ""), infiles, collapse = " "))
}


pdf("file1.pdf", width = 10, height = 8)
plot(1:10, col="red", pch = 19)
dev.off()

pdf("file2.pdf", width = 16, height = 8)
plot(1:10)
dev.off()

mergePDF("file1.pdf file2.pdf", "mergefromR.pdf", "Win32")

最佳答案

泰勒,伙计。我是否被从 Stack Ove 降级- R -flow对等你博客的“读者”?或者那是促销事件;)

这对我来说有点hackish,但应该可以完成工作。将此添加为函数的前几行并删除 os 参数:

testme <- c(UNIX = "gs -version", 
Win32 = "gswin32c -version",
Win64 = "gswin64c -version")
os <- names(which(sapply(testme, system) == 0))

我用过 -version切换以便 R 不会尝试不必要地加载 Ghostscript。

在我的 Ubuntu 系统上,当我运行它时, os正如预期的那样返回 UNIX ,并且在我安装了 32 位版本的 Ghostscript 的 Windows 系统上,它返回 Win32 .在运行 32 位 GS 的 64 位机器上尝试一下,让我知道它是如何工作的。

更新

阅读 system() 的帮助页面后和 system2() , 我了解到 Sys.which() ,这似乎正是您要找的。这是在我的 Ubuntu 系统上运行的:
Sys.which(c("gs", "gswin32c", "gswin64c"))
# gs gswin32c gswin64c
# "/usr/bin/gs" "" ""
names(which(Sys.which(c("gs", "gswin32c", "gswin64c")) != ""))
# [1] "gs"

因此,可以在 mergePDF() 中完全跳过操作系统规范。功能:
mergePDF <- function(infiles, outfile) {
gsversion <- names(which(Sys.which(c("gs", "gswin32c", "gswin64c")) != ""))
pre = " -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="
system(paste(paste(gsversion, pre, outfile, sep = ""), infiles, collapse = " "))
}

您可能想要进行一些错误检查。如长度 gsversion is > 1 或 is 0,例如,您可能想要停止该功能并提示用户安装 Ghostscript 或验证他们的 Ghostscript 版本。

关于r - 确定 ghostscript 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14366406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com