检查程序是否已安装

时间:2013-02-19 18:11:17

标签: r pandoc

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

3 个答案:

答案 0 :(得分:12)

我没有安装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

答案 1 :(得分:5)

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

在这种情况下,一种替代/解决方法实际上是创建一个典型路径的向量,您希望在其中找到Pandoc可执行文件(假设许多用户并不真正使用其中他们安装程序)。此信息也可在上面链接的安装页面以及Windows的典型C:\\PROGRA~1\\...路径中获得。因此,您可能会将以下内容作为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的消息。

答案 2 :(得分:4)

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

pandoc.location <- Sys.which("pandoc")
if(pandoc.location == ""){
    print("pandoc not available")
}else{
    print("pandoc available")
}