我正在尝试从BioSeqClass包运行下面的代码,但是我收到一条错误消息: 系统中的错误(命令,实习生 = TRUE):找不到"C:\程序">
selectWeka(data, evaluator="CfsSubsetEval", search="BestFirst", n)
这是BioSeqClass
调用java的方式的一个问题:它使文件名不受保护/不加引号,R的system
和system2
命令由于不强制引用而变得可怕。(如果您自己想直接使用这些命令,我强烈建议您使用类似processx
的命令。
应该创建一个问题或错误报告,但我不知道如何使用Bioconductor做到这一点,而且他们在github(https://github.com/Bioconductor-mirror)上的镜像已经失效,所以我在那里不知所措。希望有更多信息的人可以对此进行权衡。
解决方法
目前尚不清楚问题是由于weka.jar
所在的位置还是其他参数之一。您可以通过调试selectWeka
函数并在系统调用之前检查command
的值来找出问题所在。查找路径的Program Files
组件。
如果问题出在weka.jar
上,那么这表明您正在C:Program Files
下的某个地方安装软件包,根据我的经验,这在两个方面是不良做法:
对于许多我不记得的问题(但这个问题重新引发了讨论),我从不将R安装在
C:Program Files...
下的默认位置;相反,我将其安装在新目录下,C:RR-3.5.3
(基于版本)并从那里开始。如果在大学/公司系统上,您可能无法控制这一点。由于这不在 base-R 包中,这表明您没有使用个人库位置(包集合),或者出于某种原因将您的个人库放在
C:Program Files
下。如果是前者,我强烈建议您永远不要在 base-R 安装目录中安装新软件包,而是使用您自己的软件包。在线查看有关该主题的?.libPaths
和许多其他教程/讨论。使用packrat
或checkpoint
也可以缓解此问题。
如果问题出在trainFile
上(如果我正确阅读了源代码),那么您的"永久"修复是更改 Windows 放置临时文件的位置,因为此trainFile
是专门为此函数运行创建的临时文件。如果这是你的问题,我会把它留
给你来解决。无论如何,您可能没有时间或不需要制定更永久的解决方案,您只想运行一两次,然后继续。对于该修复程序:
再次,
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(...)
是正确的方法,但您可能需要改用sQuote
或dQuote
,我不确定您的系统是如何设置的。