Я делаю некоторый анализ биоинформатики в Rstudio, но что-то странное происходит при использовании system ().Я также использую подсистему Windows для Linux, поэтому я могу запустить исполняемый файл UNIX в моей Windows cmd примерно так:
bash -c "./parasail-master/build/parasail_aligner -a sw_trace_striped_sat -f SSWtemplate.fa -q SSWtest.fa -O EMBOSS -d >OUT.txt"
Не беспокойтесь о специфике: важно то, что важночто я использую bash -c , чтобы указать, что я хочу использовать UNIX bash, и я запускаю исполняемый файл parasail_aligner.Все работает, и я получаю хороший выходной файл "OUT.txt".
Теперь, так как я делаю свой анализ в Rstudio, я хочу выполнить это непосредственно из сценария R, например, так:
system('bash -c "./parasail-master/build/parasail_aligner -a sw_trace_striped_sat -f SSWtemplate.fa -q SSWtest.fa -O EMBOSS -d >OUTER.txt"')
Итак: просто передайте это в качестве аргумента system () ?Но это дает следующую ошибку:
input file, query file, and stdin detected; max inputs is 2
Это, очевидно, ошибка, специально сгенерированная parasail_aligner.Самое смешное: Я вообще не получаю эту ошибку непосредственно из cmd, но я получаю ее при запуске команды в R с использованием system () .У кого-нибудь есть идеи, почему что-то подобное может вообще случиться?Я ожидал бы, что system () просто передаст свой аргумент cmd, но, очевидно, он этого не делает ... Запуск команды в командном терминале, открытом в Rstudio, также работает нормально, это именно system (), которая, кажется, не работает.
Мне очень жаль, если этот вопрос неопределенный, но я не могу дать вам простой пример, который вы могли бы использовать для воспроизведения ошибки.Я уже некоторое время использую system (), и у меня никогда не было таких проблем.Я нахожусь на Windows, и я нашел некоторых людей онлайн, которые говорят, что вы должны использовать shell () вместо system (), но при этом просто выдает мне ту же ошибку.
Возможно, это как-то связано с этим« stdin » вещь, в которой упоминается ошибка, и как R / RStudio справляется с этим, я не знаю.Но Parasail, кажется, думает, что я даю ему дополнительный ввод "stdin": это правда, что я даю Input File и Query File (см. Сообщение об ошибке), но я не знаю, что это за "stdin".
Если у кого-то есть идеи о том, что может быть за этим странным поведением системы (), я весь в ушах.Я понимаю, что помочь мне сложно, поскольку я не могу привести простой пример, в котором возникает проблема, но я надеюсь, что кто-то может знать, в чем может быть проблема в любом случае
ОБНОВЛЕНИЕ (ответ?) : итак, мне удалось решить проблему, вот так:
system('bash -c "./parasail-master/build/parasail_aligner -a sw_trace_striped_sat < SSWtemplate.fa -f SSWtest.fa -O EMBOSS -d >OUTER.txt"')
Я немного искал о stdin, и (простите, если то, что я говорю, звучит как любитель, я не очень знаком с UNIX иликомандной строки) обнаружил, что его "символ" является <</strong>.Как вы можете видеть в приведенном выше коде, я изменил способ, которым я даю свои входные данные «SSWtemplate» и «SSWtest», предоставив один из них с помощью «<», и это решает проблему. </p> У меня нетИдея, почему это происходит.Тем более что это происходит только при вызове команды изнутри RStudio, а не при выполнении команды из cmd.Если кто-то может прояснить это далее (то есть, почему и как такие функции, как system () и shell (), похоже, связываются со stdin), это было бы большой помощью.В противном случае я просто отвечу на свой вопрос и оставлю все как есть.