Die äußere Schleife:

Die äußere Schleife:

Ich muss eine Analyse in skatMeta (R-Paket) ausführen. Ich habe eine erhalten, runscript.shdie zum Ausführen der Analyse aufruft myfile.R. Das Skript ist jedoch für Linux geschrieben, ich habe aber nur Windows. Ich habe Cygwin installiert, weiß aber jetzt nicht, wie ich es ausführen soll. Die Datei runscript.sh lautet:

for t in `echo A B` ; do 
  for i in `seq 1 22 ; echo X` ; 
  do 
       qth "export R_LIBS=~/lib/ ; 
       R --vanilla --args phenotype=$t chr=$i < ~/bin/skat.R" ;
  done ;
done

Kann mir jemand erklären, was ich tun soll? Ich bin völlig verwirrt und weiß nicht, wo diese Dateien liegen sollen. Ist es OK, wenn ich R und skatMeta für Windows installiert habe? Ich weiß nicht einmal, wie ich es von cmd aus ausführen kann. Und bitte erklären Sie es so klar und einfach wie möglich, da ich von diesen Dingen keine Ahnung habe (eine Erklärung für Dummies).

Antwort1

Schauen wir uns zunächst an, was das Skript eigentlich macht:


Die äußere Schleife:

for t in `echo A B` ; do
(removed for clarity)      
done

Dadurch wird die Variable $t auf A gesetzt, der Rest der Befehle wird in der Schleife ausgeführt und dann wird dies mit $t auf B gesetzt wiederholt. Außerdem geschieht dies auf seltsame Weise durch die Ausführung einer Subshell, um A und B wiederzugeben. Eine einfache for t in A B ; dowürde dasselbe tun.


Als nächstes die innere Schleife.

seq 1 22 ; echo X

seq erzeugt eineFolgeEinfluß der Zahlen von 1 bis 22. DannXwird hinzugefügt. In einer längeren Form würde man es schreiben alsfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X


Schließlich die Befehle:

Fügen Sie dies dem inneren Code hinzu und Sie erhalten diese Befehle:

 qth "export R_LIBS=~/lib/ ;  
 R --vanilla --args phenotype=A chr=1 < ~/bin/skat.R" ;  
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=A chr=2 < ~/bin/skat.R" ;  
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=A chr=3 < ~/bin/skat.R" ;  
 ...   
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=A chr=19 < ~/bin/skat.R" ;  
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=A chr=20 < ~/bin/skat.R" ;  
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=A chr=X < ~/bin/skat.R" ;  
 qth "export R_LIBS=~/lib/ ;  
 R --vanilla --args phenotype=B chr=1 < ~/bin/skat.R" ;  
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=B chr=2 < ~/bin/skat.R" ;  
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=B chr=3 < ~/bin/skat.R" ;  
 ...   
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=B chr=19 < ~/bin/skat.R" ;  
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=B chr=20 < ~/bin/skat.R" ;  
 qth "export R_LIBS=~/lib/ ;   
 R --vanilla --args phenotype=B chr=X < ~/bin/skat.R" ;  


Nachdem wir nun wissen, was es tut, können Sie es entweder manuell ausführen, eine Batchdatei oder ein Powershell-Skript schreiben. :-)

Es würde wahrscheinlich ungefähr Folgendes enthalten:

C:\program files\SkatMeta\R.exe --vanilla --args phenotype=A chr=1 < %%HOMEPATH%%\bin\skat.R" 
C:\program files\SkatMeta\R.exe --vanilla --args phenotype=A chr=2 < %%HOMEPATH%%\bin\skat.R"  
C:\program files\SkatMeta\R.exe --vanilla --args phenotype=A chr=3 < %%HOMEPATH%%\bin\skat.R" 

Etc etc with chr is 4 5 6 7 8 ... 21 22 X
And then the same for B

Wobei die erste Zeile der vollständige Pfad zur R-Binärdatei ist (Standard unter Windows ist C:\Programme\Name_des_Herstellers\Programmname.exe) und wo die Unix-Verknüpfung für Home ( ~) durch %HOMEPATH% ersetzt wurde. Die letzte Zeile wird wahrscheinlich zu C:/Benutzer/Ihr_Benutzername erweitert und ich habe sie in doppelte %-Zeichen gekapselt, was für eine Batchdatei erforderlich ist.

Diesen Teil überlasse ich einem anderen Poster, da Windows-Scripting überhaupt nicht meine Stärke ist.

verwandte Informationen