系统中的错误(命令,实习生 = TRUE):'"C:Program'找不到选择Weka函数



我正在尝试从BioSeqClass包运行下面的代码,但是我收到一条错误消息: 系统中的错误(命令,实习生 = TRUE):找不到"C:\程序">

selectWeka(data, evaluator="CfsSubsetEval", search="BestFirst", n)

这是BioSeqClass调用java的方式的一个问题:它使文件名不受保护/不加引号,R的systemsystem2命令由于不强制引用而变得可怕。(如果您自己想直接使用这些命令,我强烈建议您使用类似processx的命令。

应该创建一个问题或错误报告,但我不知道如何使用Bioconductor做到这一点,而且他们在github(https://github.com/Bioconductor-mirror)上的镜像已经失效,所以我在那里不知所措。希望有更多信息的人可以对此进行权衡。


解决方法

目前尚不清楚问题是由于weka.jar所在的位置还是其他参数之一。您可以通过调试selectWeka函数并在系统调用之前检查command的值来找出问题所在。查找路径的Program Files组件。

如果问题出在weka.jar上,那么这表明您正在C:Program Files下的某个地方安装软件包,根据我的经验,这在两个方面是不良做法:

  1. 对于许多我不记得的问题(但这个问题重新引发了讨论),我从不将R安装在C:Program Files...下的默认位置;相反,我将其安装在新目录下,C:RR-3.5.3(基于版本)并从那里开始。如果在大学/公司系统上,您可能无法控制这一点。

  2. 由于这不在 base-R 包中,这表明您没有使用个人库位置(包集合),或者出于某种原因将您的个人库放在C:Program Files下。如果是前者,我强烈建议您永远不要在 base-R 安装目录中安装新软件包,而是使用您自己的软件包。在线查看有关该主题的?.libPaths和许多其他教程/讨论。使用packratcheckpoint也可以缓解此问题。

如果问题出在trainFile上(如果我正确阅读了源代码),那么您的"永久"修复是更改 Windows 放置临时文件的位置,因为此trainFile是专门为此函数运行创建的临时文件。如果这是你的问题,我会把它留

给你来解决。无论如何,您可能没有时间或不需要制定更永久的解决方案,您只想运行一两次,然后继续。对于该修复程序:

  1. 再次,debug(selectWeka),一旦定义了command(下一个要执行的命令是tmp <- system(command,intern = TRUE)),运行以下代码来修复command的值:

    if(search=="Ranker"){
    command = paste("java -cp ", shQuote(file.path(.path.package("BioSeqClass"), "scripts", "weka.jar")),
    " weka.attributeSelection.", evaluator, " -i ", shQuote(trainFile),
    " -s "weka.attributeSelection.", search, " -N ", n, """, sep="" )
    }else{
    command = paste("java -cp ", shQuote(file.path(.path.package("BioSeqClass"), "scripts", "weka.jar")),
    " weka.attributeSelection.", evaluator, " -i ", shQuote(trainFile),
    " -s weka.attributeSelection.", search, sep="" )
    }
    

    (作为记录,我所做的只是在每个paste中添加两次shQuote。确认command现在在事物周围有引号,例如

    Browse[2]> command
    [1] "java -cp "C:\Program Files\...\weka.jar" weka.attributeSel... -i "c:\path\to\some\tempfile" ...
    

    然后,您可以继续退出调试器并让它运行。

    (我希望你不要有数百个电话要selectWeka

警告:我不是一个使用BioSeqClass,所以我说这一切都来自猜测和推断。我可能错误地定位了错误的源。而且由于我不知道我在用它做什么,所以我还没有在selectWeka内测试修改后的command赋值。我相信shQuote(...)是正确的方法,但您可能需要改用sQuotedQuote,我不确定您的系统是如何设置的。

相关内容

最新更新