系统错误(命令,实习生= TRUE):找不到“ C:\ Program” selectWeka函数

时间:2019-05-26 20:31:55

标签: r

我正在尝试从BioSeqClass包中运行以下代码,但是出现错误消息: 系统错误(命令,实习生= TRUE):找不到“ C:\ Program”

selectWeka(data,evaluator =“ CfsSubsetEval”,search =“ BestFirst”,n)

1 个答案:

答案 0 :(得分:0)

这是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:\R\R-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)),请运行以下代码来固定{{1}的值}:

    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="" ) } 添加了shQuote两次。)确认paste现在在事物周围加上了引号,例如

    command

    然后,您可以继续调试器,并使其运行。

    (我希望您没有打给Browse[2]> command [1] "java -cp \"C:\\Program Files\\...\\weka.jar" weka.attributeSel... -i \"c:\\path\\to\\some\\tempfile\" ... 的数百个电话。)

注意:我不使用selectWeka,所以我说的都是出于推测和推论。我可能错误地定位了错误的来源。而且由于我不知道自己在做什么,因此我没有测试BioSeqClass中修改后的command分配。我相信selectWeka是正确的选择,但是您可能需要使用shQuote(...)sQuote来代替,但我不确定系统的设置方式。