Запуск Plink из R

Я пытаюсь использовать компьютер с Windows для подключения SSH к серверу Mac, запустить программу и передать выходные данные обратно в мою Windows. Мне удалось сделать это вручную с помощью Putty.

Теперь я пытаюсь автоматизировать процесс, используя Plink. Я добавил Plink в свой путь Windows, поэтому, если я открою cmd и введу команду, я смогу успешно войти в систему и передать команды на сервер: Работает вручную!

Однако я хотел бы автоматизировать это с помощью R, чтобы упростить процесс анализа данных. Основываясь на некоторых поисках, в Интернете кажется, что команда shell лучше всего подходит для этой задачи. К сожалению, похоже, что Plink не находит, хотя передача команд через shell в терминал работает:

Plink не распознан

Если я попробую то же самое, но вручную установлю путь к Plink с помощью shell, вывод не будет возвращен, но команды, похоже, не запускаются (например, TESTFOLDER не создается):

введите здесь описание изображения

У кого-нибудь есть идеи, почему Plink недоступен, когда я пытаюсь вызвать его из R? В качестве альтернативы, если есть другие идеи о том, как это можно сделать в R, это также будет оценено.

Заранее спасибо, - Сэм


person Sam Zipper    schedule 15.01.2015    source источник


Ответы (2)


Я пришел сюда в поисках ответа на этот вопрос, поэтому мне нечего предложить, но я думаю, что мне удалось заставить начальные шаги PLINK работать в R с помощью функции оболочки...

Вот что сработало для меня:

НЕ в R:

  • Установите PLINK и добавьте его местоположение в PATH.
  • Загрузите файлы примеров из руководства PLINK (http://pngu.mgh.harvard.edu/~purcell/plink/tutorial.shtml) и поместите их в папку, путь которой НЕ содержит пробелов (если только вы не знаете чего-то, чего не знаю я, в этом случае расставьте пробелы).

Затем в R:

## Set your working directory as the path to the PLINK program files: ##
setwd("C:/Program Files/plink-1.07-dos")

##  Use shell to check that you are now in the right directory: ##
shell("cd")

## At this point, the command "plink" should be at least be recognized
# (though you may get a different error)
shell("plink")

## Open the PLINK example files ##
# FYI mine are in "C:/PLINK/", so replace that accordingly...
shell("plink --file C:\\PLINK\\hapmap1") 

## Make a binary PED file ##
# (provide the full path, not just the file name)
shell("plink --file C:\\PLINK\\hapmap1 --make-bed --out C:\\PLINK\\hapmap1")

... и так далее.

Это все, что я сделал до сих пор. Но, если повезет, зеркальное отображение структуры и общего формата этих строк кода должно позволить вам делать то, что вам нравится, с PLINK из R.

Надеюсь, это поможет!

PS. Вывод PLINK должен быть просто напечатан в вашей консоли R, когда вы запустите приведенные выше строки.

Всего наилучшего,
– CC.

person Caitlin Collins    schedule 20.05.2015
comment
Спасибо, Кейтлин, я попробую в будущем и посмотрю, поможет ли это! Я обновил решение, которое нашел ниже, на случай, если оно будет вам полезно. - person Sam Zipper; 21.05.2015
comment
@CaitlinCollins, я думаю, вы путаете инструмент командной строки ssh plink, который, кажется, запрашивает ОП с помощью программы геномного анализа plink - person Empiromancer; 08.11.2017

Только что увидел ответ Кейтлин, и он напомнил мне, что я никогда не обновлял свое решение. Мой подход был своего рода обходным путем, а не решением моей конкретной проблемы, но он может быть полезен другим.

После добавления Plink в PATH я создал пакетный скрипт в Windows, который содержал все мои команды Plink, а затем вызвал пакетный скрипт из R с помощью командной оболочки:

So, in R:

shell('BatchScript.bat')

Пакетный скрипт содержал все мои команды, которые я хотел использовать в Plink:

:: transfer file to phosphorus
pscp C:\Users\Sam\...\file zipper@144.**.**.208:/home/zipper/

:: open connection to Dolphin using plink
plink -ssh zipper@144.**.**.208 Batch_Script_With_Remote_Machine_Commands.bat

:: transfer output back to local machine
pscp zipper@144.**.**.208:/home/zipper/output/ C:\Users\Sam\..\output\

Надеюсь, это поможет кому-то!

person Sam Zipper    schedule 20.05.2015