8

我正在编写一个通过命令行在 R 中使用 pandoc 的函数。如何使用 R 检查是否安装了 pandoc(我还假设它必须在路径上,这对 Windows 用户来说可能是个问题)?

4

3 回答 3

13

我没有要安装 pandoc ,但通常我会测试是否安装了这样的程序:

pandoc.installed <- system('pandoc -v')==0

例如测试是否安装了java:

 java.installed <- system('java -version') ==0

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
> java.installed
[1] TRUE
于 2013-02-19T18:24:28.943 回答
5

这个建议完全基于我对这个问题的个人经验,即 RStudio 似乎无法读取我.bashrc在 Ubuntu 系统上的文件中的内容。我已经使用此处cabal install pandoc描述的方法安装了 Pandoc,因为我需要从更新版本的 Pandoc 中获得的功能比 Ubuntu 的包管理器提供的功能。从终端运行 R 可以按预期使用 检测 Pandoc ,但是在使用 RStudio 时,它不能。我不知道这是否是 Windows 用户的问题!Sys.which

在这种情况下,一种替代/解决方法实际上是创建一个典型路径的向量,您希望在其中找到 Pandoc 可执行文件(假设许多用户并不真正关心他们安装程序的位置)。同样,此信息可在上面链接的安装页面以及C:\\PROGRA~1\\...Windows 的典型路径中找到。因此,您可能有类似以下内容作为 Pandoc 的路径:

myPaths <- c("pandoc", 
             "~/.cabal/bin/pandoc", 
             "~/Library/Haskell/bin/pandoc", 
             "C:\\PROGRA~1\\Pandoc\\bin\\pandoc") 
             # Maybe a .exe is required for that last one?
             # Don't think so, but not a regular Windows user

您可以将其与Sys.which()(例如,Sys.which(myPaths))和已经分享的其他一些想法一起使用。

  • 如果第一个选项是唯一匹配的,那么就没有问题:您可以直接使用对 Pandoc 的系统调用。
  • 如果任何其他选项是唯一匹配的,您可以编写函数,以便在系统调用中粘贴到可执行文件的完整路径,而不仅仅是“pandoc”。
  • 如果第一个选项和任何其他选项匹配,那么您只需选择第一个选项并继续。
  • 如果不匹配,提示用户输入 Pandoc 安装路径或提供有关如何安装 Pandoc 的消息。
于 2013-02-19T19:41:59.843 回答
5

我想您可以使用Sys.which并查看结果是否为空字符串。

pandoc.location <- Sys.which("pandoc")
if(pandoc.location == ""){
    print("pandoc not available")
}else{
    print("pandoc available")
}
于 2013-02-19T18:21:06.880 回答