2017-07-19 3 views
2

Ich möchte .exe-Programm (spi_sl_6.exe) mit einem Befehl von R (System) aufrufen, aber ich kann keine Parameter in das Programm mit "System" eingeben. Der folgende Befehl ist mein Befehl und meine Parameter: system("D:\\working\spi_sl_6.exe")Wie exe Programm und Eingangsparameter mit R?

https://i.stack.imgur.com/I6Try.jpg Ich bin auf der Suche nach einer langen Zeit im Netz. Aber keine Verwendung. Bitte helfen oder versuchen Sie, einige Ideen zu geben, wie dies zu erreichen ist. Danke im Voraus.

+0

Mit 'Eingabeparameter' meinst du Befehlszeilenargumente oder meinst du, sobald du das Programm öffnest, sind das Dinge, die du in das Programm eingeben würdest? Die erste Situation ist einfach zu bewältigen. Die zweite ... ist möglicherweise nur möglich, wenn das Programm geändert wird. – Dason

+0

Das scheint (imo) noch keine R Frage zu sein. Können Sie die Parameter über die Befehlszeile an das EXE-Programm senden (gerade jetzt mit R umgehen). Wenn nicht, sind Sie sicher, dass Sie können, da nicht alle Programme dies erleichtern. – user20650

+0

@ Liangzhong; Sie müssen sicherstellen, dass das exe-Programm über die Möglichkeit verfügt, Parameter an der Befehlszeile einzugeben. Wenn Sie dies tun können, dann können Sie es an einen Systemaufruf übergeben mit R – user20650

Antwort

1

Sie können den Befehl konstruieren sprintf mit:

cmd_name <- "D:\\working\spi_sl_6.exe" 
param1 <- "a" 
param2 <- "b" 
system2(sprintf("%s %s %s",cmd_name,param1,param2)) 

Oder mit system2 (ich ziehe diese Option):

system2(cmd_name, args = c(param1,param2)) 
+0

Vielen Dank für Ihre Antwort. Nach Ihrem Rat, konstruiere ich den Befehl mit system2 'system2 (" D: \\ arbeiten \\ SPI \\ test \\ spi_sl_6.exe ", args = c (2,3,6," D: \\ working \ \ SPI \\ test \\ Kita.cor "," D: \\ arbeiten \\ SPI \\ test \\ restult.txt "))' Allerdings kann das Programm nicht funktionieren. Die Nachricht lautet wie folgt: "Ausgabedatei konnte nicht geöffnet werden". In meiner begrenzten Erfahrung mit R weiß ich nicht warum. – Liangzhong

1

Dies ist die standardisierte Precipitation Index Software von http://drought.unl.edu/MonitoringTools/DownloadableSPIProgram.aspx verwenden.

Dies scheint eine funktionierende Lösung mit Windows zu geben (aber nicht ohne Warnungen!)

Fisrt die Software herunterladen und Beispieldateien

# Create directory to download software 
mydir <- "C:\\Users\\david\\spi" 
dir.create(mydir) 

url <- "http://drought.unl.edu/archive/Programs/SPI" 
download.file(file.path(url, "spi_sl_6.exe"), file.path(mydir, "spi_sl_6.exe"), mode="wb") 

# Download example files 
download.file(file.path(url, "SPI_samplefiles.zip"), file.path(mydir, "SPI_samplefiles.zip")) 
# extract one example file, and write out 
temp <- unzip(file.path(mydir, "SPI_samplefiles.zip"), "wymo.cor") 
dat <- read.table(temp) 
# Use this file as an example input 
write.table(dat, file.path(mydir,"wymo.cor"), col.names = FALSE, row.names = FALSE) 

Von Seite 3 der Hilfedatei basic-SPI- program-information.pdf Bei der obigen Verbindung sollte der Befehlszeilencode das Formular spi 3 6 12 <infile.dat >outfile.dat haben, jedoch keiner der folgenden funktionierte (nur von der Befehlszeile nicht in R), und verschiedene Iterationen, wie Parameter übergeben werden.

C:\Users\david\spi\spi_sl_6 3 <C:\Users\david\spi\wymo.cor >C:\Users\david\spi\out.dat 
cd C:\Users\david\spi && spi_sl_6 3 <wymo.cor >out.dat 

jedoch von Running .exe file with multiple parameters in c# die akzeptierte Antwort mit scheint zu funktionieren. Das ist wieder von der Kommandozeile

cd C:\Users\david\spi && (echo 2 && echo 3 && echo 6 && echo wymo.cor && echo out1.dat) | spi_sl_6 

Also das in R laufen Sie können diese wickeln in einem shell (Sie werden den Pfad, wo Sie die exe gespeichert haben ändern müssen)

shell("cd C:\\Users\\david\\spi && (echo 2 && echo 3 && echo 6 && echo wymo.cor && echo out2.dat) | spi_sl_6", intern=TRUE) 

out1.dat und out2.dat sollten gleich sein.

Dies wirft Warnmeldungen, denke ich aus der echo (in R, aber nicht von der Befehlszeile), aber die Ausgabedatei wird erzeugt.

Angenommen, Sie können alle Echoaufrufe leicht automatisieren. Sie müssen lediglich die Zeitparameter eingeben.

+1

Vielen Dank für Ihre Antwort. Du hast mein Problem perfekt gelöst. – Liangzhong

+0

Ich weiß nicht perfekt, P, aber Sie sind herzlich willkommen. Ich habe der Antwort ein voll funktionsfähiges Beispiel hinzugefügt, in der Hoffnung, dass es jemand mit mehr Vertrautheit mit der Windows-Befehlszeile leichter machen wird, Vorschläge zur Verbesserung anzubieten. – user20650

Verwandte Themen