Ошибка в системе (команда, intern = TRUE): «C: \ Program» не найдена. Функция selectWeka - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь запустить приведенный ниже код из пакета BioSeqClass, однако получаю сообщение об ошибке: Ошибка в системе (команда, intern = TRUE): «C: \ Program» не найден

selectWeka(данные, оценщик = "CfsSubsetEval", поиск = "BestFirst", n)

1 Ответ

0 голосов
/ 27 мая 2019

Это проблема того, как BioSeqClass вызывает java: он оставляет имена файлов незащищенными / не заключенными в кавычки, а команды R system и system2 ужасны, если не приводить к кавычкам. (Если вы когда-нибудь задумывались об использовании этих команд непосредственно, я настоятельно рекомендую что-то вроде 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 и многие другие учебные пособия / обсуждения по теме в Интернете. Использование packrat или checkpoint также может решить эту проблему.

Если проблема связана с 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="" )
      }
    

    (Для записи все, что я изменил, это добавление 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, вместо этого, я не уверен, как настроена ваша система.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...