Это проблема того, как 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:\R\R-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="" )
}
(Для записи все, что я изменил, это добавление 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
или dQuote
, вместо этого, я не уверен, как настроена ваша система.